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代码来解图片迷宫的方法整理
Apr 02 Python
Django项目之Elasticsearch搜索引擎的实例
Aug 21 Python
利用Python绘制Jazz网络图的例子
Nov 21 Python
Pandas时间序列重采样(resample)方法中closed、label的作用详解
Dec 10 Python
pytorch 批次遍历数据集打印数据的例子
Dec 30 Python
Python3.7.0 Shell添加清屏快捷键的实现示例
Mar 23 Python
OpenCV 表盘指针自动读数的示例代码
Apr 10 Python
你需要学会的8个Python列表技巧
Jun 24 Python
如何从csv文件构建Tensorflow的数据集
Sep 21 Python
python爬虫判断招聘信息是否存在的实例代码
Nov 20 Python
Python基于execjs运行js过程解析
Nov 27 Python
pycharm 的Structure界面设置操作
Feb 05 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
jquery下onpropertychange事件的绑定方法
2010/08/01 Javascript
jquery中实现简单的tabs插件功能的代码
2011/03/02 Javascript
分别用marquee和div+js实现首尾相连循环滚动效果,仅3行代码
2011/09/21 Javascript
关于锚点跳转及jQuery下相关操作与插件
2012/10/01 Javascript
jquery和js实现对div的隐藏和显示方法
2014/09/26 Javascript
嵌入式iframe子页面与父页面js通信的方法
2015/01/20 Javascript
JavaScript实现找质数代码分享
2015/03/24 Javascript
jQuery实现鼠标悬停背景翻转的黑色导航菜单代码
2015/09/14 Javascript
jQuery实现的简单分页示例
2016/06/01 Javascript
基于JavaScript 性能优化技巧心得(分享)
2017/12/11 Javascript
详解使用vue-cli脚手架初始化Vue项目下的项目结构
2018/03/08 Javascript
nodejs基础之常用工具模块util用法分析
2018/12/26 NodeJs
Node.js事件的正确使用方法
2019/04/05 Javascript
layui 上传插件 带预览 非自动上传功能的实例(非常实用)
2019/09/23 Javascript
vue中使用vee-validator完成表单校验方案
2019/11/01 Javascript
JavaScript遍历数组的方法代码实例
2020/01/14 Javascript
浅谈Vue2.4.0 $attrs与inheritAttrs的具体使用
2020/03/08 Javascript
一篇文章看懂JavaScript中的回调
2021/01/05 Javascript
python获取一组汉字拼音首字母的方法
2015/07/01 Python
Python使用matplotlib绘制余弦的散点图示例
2018/03/14 Python
PyQt5实现拖放功能
2018/04/25 Python
浅谈Python中的全局锁(GIL)问题
2019/01/11 Python
python自动发邮件总结及实例说明【推荐】
2019/05/31 Python
python Django中models进行模糊查询的示例
2019/07/18 Python
Python实现的企业粉丝抽奖功能示例
2019/07/26 Python
解决更改AUTH_USER_MODEL后出现的问题
2020/05/14 Python
Python自动化办公Excel模块openpyxl原理及用法解析
2020/11/05 Python
美国爆米花工厂:The Popcorn Factory
2019/09/14 全球购物
Spotahome意大利:公寓和房间出租
2020/02/21 全球购物
坚定理想信念心得体会
2014/03/11 职场文书
党的群众路线教育实践活动教师自我剖析材料
2014/10/09 职场文书
个人工作年终总结
2015/03/09 职场文书
社区低保工作总结2015
2015/07/23 职场文书
springboot+WebMagic+MyBatis爬虫框架的使用
2021/08/07 Java/Android
聊聊redis-dump工具安装问题
2022/01/18 Redis
win11电脑关机鼠标灯还亮怎么解决? win11关机后鼠标灯还亮解决方法
2023/01/09 数码科技