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

相关推荐
幸运超级加倍~16 分钟前
软件设计师-上午题-16 算法(4-5分)
笔记·算法
竹笋常青31 分钟前
《流星落凡尘》
django·numpy
王俊山IT36 分钟前
C++学习笔记----10、模块、头文件及各种主题(一)---- 模块(5)
开发语言·c++·笔记·学习
时差9531 小时前
【面试题】Hive 查询:如何查找用户连续三天登录的记录
大数据·数据库·hive·sql·面试·database
让学习成为一种生活方式1 小时前
R包下载太慢安装中止的解决策略-R语言003
java·数据库·r语言
Yawesh_best2 小时前
思源笔记轻松连接本地Ollama大语言模型,开启AI写作新体验!
笔记·语言模型·ai写作
秋意钟2 小时前
MySQL日期类型选择建议
数据库·mysql
Dxy12393102163 小时前
python下载pdf
数据库·python·pdf
CXDNW3 小时前
【网络面试篇】HTTP(2)(笔记)——http、https、http1.1、http2.0
网络·笔记·http·面试·https·http2.0
使者大牙3 小时前
【大语言模型学习笔记】第一篇:LLM大规模语言模型介绍
笔记·学习·语言模型