Python Django简单实现session登录注销过程详解


Posted in Python onAugust 06, 2019

开发工具:pycharm

简单实现session的登录注销功能

Django配置好路由分发功能

默认session在Django里面的超时时间是两周

使用request.session.set_expiry(60)设置超时时间,以秒为单位

在Django配置文件里配置session链接 https://3water.com/article/166988.htm

urlpatterns = [
 path('admin/', admin.site.urls),
 path('app01/', include('app01.urls'))
]

app01/urls.py的路由如下

urlpatterns = [
 path('login/', views.login),
 path('index/', views.index),
]

app01/views.py视图的内容如下

# Create your views here.
from django.shortcuts import HttpResponse, render, redirect
def login(request):
 if request.method == 'GET':
  return render(request, 'login.html')
 elif request.method == 'POST':
  user = request.POST.get('username')
  pwd = request.POST.get('pwd')
  if user == 'song' and pwd == '123':
   # 往session里写入数据的时候,Django会自动生成随机码,发送给cookie,然后自己保留一份跟cookie一一对应
   request.session['username'] = user
   request.session['is_login'] = True
   #设置session(同时对应的cookie)超时时间,按秒计算
   request.session.set_expiry(60)
   # 路径已经要写全,把/app01带上,以前好像不带是可以的
   return redirect('/app01/index/')
  else:
   return render(request, 'login.html')
def index(request):
 # 拿到cookie对应的随机码,来查找session里的is_login字段是否True,如果通过则表示通过
 if request.session.get('is_login', None):
  return render(request, 'index.html')
 else:
  return HttpResponse('滚')
def logout(request):
 # 清除当前对应session所有数据
 request.session.clear()
 # 路径已经要写全,把/app01带上,以前好像不带是可以的
 return redirect('/app01/login')

templates目录的里login.html内容

form表单里路径一定要带上/app01的路径

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>
</head>
<body>
 <div>
  <form action="/app01/login/" method="post">
   <input type="text" name="username">
   <input type="password" name="pwd">
   <input type="submit" value="提交">
  </form>
 </div>
</body>
</html>

templates目录的里index.html内容

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>
</head>
<body>
 <h1>登录成功</h1>
 <div>
  <a href="/app01/logout/" rel="external nofollow" rel="external nofollow" >注销</a>
 </div>
</body>
</html>

重点重点重点!!!如果出现已下报错,则是因为session信息要保存到数据库中,而你的Django没创建session表呢,

所以要在命令行执行以下命令,来构造session表

python manage.py makemigrations
python manage.py migrate

Python Django简单实现session登录注销过程详解

==================================分割线=======================================================

带session信息版本的简单认证实现

models.py文件内容

from django.db import models
# Create your models here.
class UserInfo(models.Model):
 username = models.CharField(max_length=16)
 password = models.CharField(max_length=32)

urls.py文件内容

from django.contrib import admin
from django.urls import path,include
from app01 import views
from django.conf.urls import url
urlpatterns = [
 # path('login/', views.login),
 path('index/', views.index),
 # path('logout/', views.logout),
 # path('fm/', views.fm),
 path('aa/', views.aa),
 path('select/', views.select),
]

views.py文件的内容

# Create your views here.
from django.shortcuts import HttpResponse, render, redirect
from django.views.decorators.csrf import csrf_exempt,csrf_protect
from app01 import models
from functools import wraps
#做session验证的的装饰器,
def checklogin(func):
 @wraps(func)
 def wrapper(request,*args,**kwargs):
  if request.session.get('is_login') == '1':
   return func(request,*args,**kwargs)
  else:
   return redirect('/app01/aa')
 return wrapper

def aa(requrst):
 if requrst.method == 'GET':
  print('get')
  return render(requrst, 'aa.html')
 elif requrst.method == 'POST':
  username = requrst.POST.get('username')
  pwd = requrst.POST.get('password')
  user = models.UserInfo.objects.filter(username=username,password=pwd)
  # print(type(pwd))
  # print(models.UserInfo.objects.filter(username=username).values('password'))
  if user:
   #如果输入的账户名跟数据库中的账户名密码相匹配就忘session信息里写入一条is_login的数据
   #同时随机生成的字符串ID也写到cookie里当做sessionid使用
   requrst.session['is_login'] = '1'
   return redirect('/app01/index')
  return redirect('/app01/aa')

#在访问页面的时候先做验证,拿自己的cookie里的sessionid去跟服务器端的session_key做对比
#对比认证通过就允许访问
@checklogin
def index(request):
 return render(request,'index.html')

aa.html文件内容

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>aa</title>
</head>
<body>
 <h1>aa页面</h1>
 <form action="/app01/aa/" method="POST">
 {% csrf_token %}
  <p>用户名:
 <input type="text" name="username">
  </p>
  <p>密码:
 <input type="password" name="password">
  </p>
  <input type="submit" value="提交">
 </form>
</body>
</html>

index.html文件内容

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>
</head>
<body>
 <h1>登录成功</h1>
 <div>
  <a href="/app01/logout/" rel="external nofollow" rel="external nofollow" >注销</a>
 </div>
</body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python通过正则查找微博@(at)用户的方法
Mar 13 Python
Python应用03 使用PyQT制作视频播放器实例
Dec 07 Python
浅谈python连续赋值可能引发的错误
Nov 10 Python
在Python中关于使用os模块遍历目录的实现方法
Jan 03 Python
详解python中递归函数
Apr 16 Python
Django之富文本(获取内容,设置内容方式)
May 21 Python
公认8个效率最高的爬虫框架
Jul 28 Python
常用的10个Python实用小技巧
Aug 10 Python
无需压缩软件,用python帮你操作压缩包
Aug 17 Python
详解Django中views数据查询使用locals()函数进行优化
Aug 24 Python
Python操控mysql批量插入数据的实现方法
Oct 27 Python
python中scipy.stats产生随机数实例讲解
Feb 19 Python
Django框架中序列化和反序列化的例子
Aug 06 #Python
python异常触发及自定义异常类解析
Aug 06 #Python
Python DataFrame一列拆成多列以及一行拆成多行
Aug 06 #Python
Django中reverse反转并且传递参数的方法
Aug 06 #Python
matplotlib命令与格式之tick坐标轴日期格式(设置日期主副刻度)
Aug 06 #Python
python+openCV调用摄像头拍摄和处理图片的实现
Aug 06 #Python
对Django 转发和重定向的实例详解
Aug 06 #Python
You might like
动画 《Pokemon Sword·Shield》系列WEB动画《薄明之翼》第2话声优阵容公开!
2020/03/06 日漫
使用php实现截取指定长度
2013/08/06 PHP
php session劫持和防范的方法
2013/11/12 PHP
IE6下focus与blur错乱的解决方案
2011/07/31 Javascript
jquery中使用$(#form).submit()重写提交表单无效原因分析及解决
2013/03/25 Javascript
JS过滤url参数特殊字符的实现方法
2013/12/24 Javascript
js解决弹窗问题实现班级跳转DIV示例
2014/01/06 Javascript
用原生js做个简单的滑动效果的回到顶部
2014/10/15 Javascript
jQuery中delegate()方法用法实例
2015/01/19 Javascript
JS实现星星评分功能实例代码(两种方法)
2016/06/09 Javascript
详解vue组件通信的三种方式
2017/06/30 Javascript
JS实现简单表格排序操作示例
2017/10/07 Javascript
微信小程序云开发 搭建一个管理小程序
2019/05/17 Javascript
js实现图片3D轮播效果
2019/09/21 Javascript
微信小程序之左右布局的实现代码
2019/12/13 Javascript
详解Vue的watch中的immediate与watch是什么意思
2019/12/30 Javascript
PyQt5实现拖放功能
2018/04/25 Python
tensorflow 获取变量&amp;打印权值的实例讲解
2018/06/14 Python
Python设计模式之外观模式实例详解
2019/01/17 Python
pymysql模块的使用(增删改查)详解
2019/09/09 Python
python-视频分帧&amp;多帧合成视频实例
2019/12/10 Python
Django-imagekit的使用详解
2020/07/06 Python
简单的Python人脸识别系统
2020/07/14 Python
使用python库xlsxwriter库来输出各种xlsx文件的示例
2020/09/01 Python
OpenCV灰度化之后图片为绿色的解决
2020/12/01 Python
python中threading和queue库实现多线程编程
2021/02/06 Python
梅西百货官网:Macy’s
2020/08/04 全球购物
车工岗位职责
2013/11/26 职场文书
顶撞领导检讨书
2014/01/29 职场文书
交通事故调解协议书
2014/04/16 职场文书
酒店收银员岗位职责
2015/04/07 职场文书
简单的辞职信模板
2015/05/12 职场文书
升学宴学生致辞
2015/07/27 职场文书
2016年清明节寄语
2015/12/04 职场文书
《风不能把阳光打败》读后感3篇
2020/01/06 职场文书
uniapp 微信小程序 自定义tabBar 导航
2022/04/22 Javascript