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+opencv实现动态物体识别
Jan 09 Python
selenium+python截图不成功的解决方法
Jan 30 Python
使用python list 查找所有匹配元素的位置实例
Jun 11 Python
使用python实现简单五子棋游戏
Jun 18 Python
python实现XML解析的方法解析
Nov 16 Python
python GUI库图形界面开发之PyQt5日期时间控件QDateTimeEdit详细使用方法与实例
Feb 27 Python
python生成并处理uuid的实现方式
Mar 03 Python
python爬虫基础知识点整理
Jun 02 Python
没编程基础可以学python吗
Jun 17 Python
python实现人性化显示金额数字实例详解
Sep 25 Python
Jupyter Notebook 远程访问配置详解
Jan 11 Python
python 如何执行控制台命令与操作剪切板
May 20 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
php单件模式结合命令链模式使用说明
2008/09/07 PHP
一个比较不错的PHP日历类分享
2014/11/18 PHP
浅析php设计模式之数据对象映射模式
2016/03/03 PHP
数组任意位置插入元素,删除特定元素的实例
2017/03/02 PHP
thinkPHP5框架路由常用知识点汇总
2019/09/15 PHP
幻宇的层模拟窗口效果-提供演示和下载
2007/01/20 Javascript
window.parent与window.openner区别介绍
2012/04/12 Javascript
javascript判断机器是否联网的2种方法
2013/08/09 Javascript
新增加的内容是如何将div的scrollbar自动移动最下面
2014/01/02 Javascript
javaScript中with函数用法实例分析
2015/06/08 Javascript
jquery选择器中的空格与大于号&gt;、加号+与波浪号~的区别介绍
2016/06/24 Javascript
Vuejs第十二篇之动态组件全面解析
2016/09/09 Javascript
JavaScript运动框架 解决防抖动问题、悬浮对联(二)
2017/05/17 Javascript
初探JavaScript 面向对象(推荐)
2017/09/03 Javascript
微信小程序框架wepy之动态控制类名
2018/09/14 Javascript
Django框架下在URLconf中指定视图缓存的方法
2015/07/23 Python
Python的净值数据接口调用示例分享
2016/03/15 Python
Python中的os.path路径模块中的操作方法总结
2016/07/07 Python
python3+PyQt5重新实现QT事件处理程序
2018/04/19 Python
基于OpenCV python3实现证件照换背景的方法
2019/03/22 Python
详解10个可以快速用Python进行数据分析的小技巧
2019/06/24 Python
TensorFlow 多元函数的极值实例
2020/02/10 Python
Python自动重新加载模块详解(autoreload module)
2020/04/01 Python
python 实现逻辑回归
2020/12/30 Python
Python 中的函数装饰器和闭包详解
2021/02/06 Python
纯CSS3实现8组超炫酷鼠标滑过图片动画
2016/03/16 HTML / CSS
美国最便宜的旅游网站:CheapTickets
2017/07/09 全球购物
应届大学生的推荐信
2013/11/20 职场文书
仓管岗位职责范本
2014/02/08 职场文书
《宋庆龄故居的樟树》教学反思
2014/04/07 职场文书
资源环境与城乡规划管理专业自荐书
2014/09/26 职场文书
国际贸易本科毕业生求职信
2014/09/26 职场文书
2016年优秀共青团员事迹材料
2016/02/25 职场文书
2016班级元旦联欢会开幕词
2016/03/04 职场文书
python基础入门之普通操作与函数(三)
2021/06/13 Python
Python绘制散乱的点构成的图的方法
2022/04/21 Python