【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 命令进行数据迁移。

相关推荐
yngsqq4 分钟前
031集——文本文件按空格分行——C#学习笔记
笔记·学习·c#
cyt涛40 分钟前
MyBatis 学习总结
数据库·sql·学习·mysql·mybatis·jdbc·lombok
sealaugh321 小时前
aws(学习笔记第一课) AWS CLI,创建ec2 server以及drawio进行aws画图
笔记·学习·aws
CXDNW1 小时前
【网络篇】计算机网络——应用层详述(笔记)
服务器·笔记·计算机网络·http·web·cdn·dns
Rookie也要加油1 小时前
01_SQLite
数据库·sqlite
向上的车轮1 小时前
Django学习笔记五:templates使用详解
笔记·学习·django
liuxin334455661 小时前
教育技术革新:SpringBoot在线教育系统开发
数据库·spring boot·后端
看山还是山,看水还是。2 小时前
MySQL 管理
数据库·笔记·mysql·adb
fishmemory7sec2 小时前
Koa2项目实战2(路由管理、项目结构优化)
数据库·mongodb·koa
momo小菜pa2 小时前
【MySQL 09】表的内外连接
数据库·mysql