【Django笔记】 登录功能

1. post请求

sign/templates/index.html

其中 :

复制代码
<form  method="post">
python 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

</head>
<body>
<h1>  发布会管理
</h1>
<form  method="post">
    <input name="username" type="text" placeholder="username"><br>
    <input name="password" type="password" placeholder="password"><br>
    <button id="btn"  type="submit">登录</button>

</form>
</body>
</html>

2.出现跨站请求伪造

Django 正对CSRF 的保护错误是生成的每个表单中放置一个自动生成令牌。通过这个令牌胖墩POST请求是否来自同一个网站。form 添加 { % csrf_token %}

python 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

</head>
<body>
<h1>  发布会管理
</h1>
<form  method="post">
    <input name="username" type="text" placeholder="username"><br>
    <input name="password" type="password" placeholder="password"><br>
    <button id="btn"  type="submit">登录</button>
  {%  csrf_token  %}
</form>
</body>
</html>

3.Cookie 和Session

Cookie 机制 :

Cookie 分发通过拓展Http 协议来实现,服务器通过在http 的响应头中加上一行特殊的指示来提示浏览器按照只是生成相应的Cookie.

Session机制: Session 机制 是一种服务器的机制,服务器使用一种雷士与散列表的结构,保存信息。

Cookie 使用

event_manage.html

python 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

    <h1> Login  Success  !</h1>
    <div style="float:right;">
    <a> 嘿 {{ user }} 欢迎 </a>
    </div>
</body>
</html>

4.Cookie

sign/views.py

设置cookie 的值

response= HttpResponseRedirect('/event_manage/') # 重定向
response.set_cookie('user',username,3600) # 添加浏览器
return response

# 发布会管理 --取出cookie 的值
def event_manage(request):
username=request.COOKIES.get("user","")# 读取浏览器cookie
return render(request, "event_manage.html",{"user":username})

python 复制代码
from django.shortcuts import render

# Create your views here.
from django.http import HttpResponse
from django.http import HttpResponse, HttpResponseRedirect


# 定义inex 函数,通过HttpResponse 类向客户端返回字符创
def index(request):
    # return HttpResponse("Hello Django!")  # 使用Django 的render函数
    return render(request, "index.html")


def login_action(request):
    if request.method == "POST":
        username = request.POST.get('username', "")  # 字段对应表单的input属性
        password = request.POST.get('password', '')
        if username == 'admin' and password == "admin123":

            # return HttpResponse('login success')
            response= HttpResponseRedirect('/event_manage/')  # 重定向
            response.set_cookie('user',username,3600)  # 添加浏览器
            return response
        else:
            return render(request, "index.html", {'error': 'username or password error!'})


# 发布会管理
def event_manage(request):
    username=request.COOKIES.get("user","")# 读取浏览器cookie
    return render(request, "event_manage.html",{"user":username})

5.Session

python 复制代码
from django.shortcuts import render

# Create your views here.
from django.http import HttpResponse
from django.http import HttpResponse, HttpResponseRedirect


# 定义inex 函数,通过HttpResponse 类向客户端返回字符创
def index(request):
    # return HttpResponse("Hello Django!")  # 使用Django 的render函数
    return render(request, "index.html")


def login_action(request):
    if request.method == "POST":
        username = request.POST.get('username', "")  # 字段对应表单的input属性
        password = request.POST.get('password', '')
        if username == 'admin' and password == "admin123":

            # return HttpResponse('login success')
            response= HttpResponseRedirect('/event_manage/')  # 重定向
            #response.set_cookie('user',username,3600)  # 添加浏览器
            request.session['user']=username # 将session 信息记录到浏览器
            return response
        else:
            return render(request, "index.html", {'error': 'username or password error!'})


# 发布会管理
def event_manage(request):
    #username=request.COOKIES.get("user","")# 读取浏览器cookie
    username=request.session.get("user","") # 读取浏览器session
    return render(request, "event_manage.html",{"user":username})
python 复制代码
   return super().execute(sql, params)
  File "D:\software\python3\anconda3\Lib\site-packages\django\db\backends\utils.py", line 67, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "D:\software\python3\anconda3\Lib\site-packages\django\db\backends\utils.py", line 76, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "D:\software\python3\anconda3\Lib\site-packages\django\db\backends\utils.py", line 80, in _execute
    with self.db.wrap_database_errors:
  File "D:\software\python3\anconda3\Lib\site-packages\django\db\utils.py", line 89, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "D:\software\python3\anconda3\Lib\site-packages\django\db\backends\utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "D:\software\python3\anconda3\Lib\site-packages\django\db\backends\sqlite3\base.py", line 383, in execute
    return Database.Cursor.execute(self, query, params)
django.db.utils.OperationalError: no such table: django_session
[01/Oct/2023 16:18:46] "POST /login_action/ HTTP/1.1" 500 140361

通过 migrate 命令进行数据迁移。

相关推荐
梁辰兴1 小时前
软件工程:数据结构设计
数据库·软件工程·设计原则·设计方法·梁辰兴·数据库结构设计·数据库结构类型
库玛西1 小时前
现代 C++ 智能指针全景指南:从 RAII 思想到工业级实践
c语言·开发语言·c++·笔记·面试
AC赳赳老秦1 小时前
风控岗应用:OpenClaw 采集公开司法与经营异常数据,自动生成企业风险评估报告
大数据·c语言·数据库·人工智能·python·php·openclaw
灯澜忆梦2 小时前
【MySQL18】进阶篇 | MySQL管理
数据库·mysql
zcmodeltech2 小时前
智能制造教学实训沙盘模型多系统协同控制系统设计:基于STM32与Modbus RTU的工业机器人-智慧工厂-数字孪生全场景联动方案
数据库·stm32·嵌入式硬件·机器人·制造·多分类
AI多Agent协作实战派3 小时前
AI多Agent协作系统实战(四十):AI说“没有错误“,系统判了“测试失败“——一个正则的误判
数据库·人工智能
隔窗听雨眠3 小时前
OceanBase接入DeepSeek:数据库与AI的深度融合如何改写企业数据规则
数据库·人工智能·oceanbase
playboy1344 小时前
工作室 NAS 存储故障-办公室所有数据无法访问怎么办
数据库
byxdaz4 小时前
jeston平台交叉编译Poppler库与预览pdf文件
数据库
SilicoCode5 小时前
江科大STM32入门:FLASH闪存详解——从结构原理到读写保护
数据库·mongodb