cookie、session与用户认证组件
1.cookie
def login(request):
if request.method == "GET":
return render(request,"login.html")
else:
user = request.POST.get("user")
pwd = request.POST.get("pwd")
user_obj = UserInfo.objects.filter(user=user,pwd=pwd).first()
if user_obj:
# 如果登录成功设置cookie
obj = redirect("/index/")
obj.set_cookie("username",user)
obj.set_cookie("is_login",True,max_age=3600*24*7)
return obj
else:
return HttpResponse("error") def index(request): print(request.COOKIES)
is_login = request.COOKIES.get("is_login")
if not is_login:
return redirect("/login/")
shangpin = "香蕉"
shangpin_list = ["苹果", "荔枝", "榴莲"]
name = request.COOKIES.get("username")
return render(request,"index.html",{"shangpin":shangpin,
"shangpin_list":shangpin_list,
"name":name})
2.session
def login_session(request):
if request.method == "GET":
return render(request,"login.html")
else:
user = request.POST.get("user")
pwd = request.POST.get("pwd")
user_obj = UserInfo.objects.filter(user=user,pwd=pwd).first()
if user_obj:
#用户认证信息储存
request.session["suername"] = user
request.session["sis_login"] = True
'''
if request.COOKIE.get("sessionid"):
random_str = request.COOKIE.get("sessionid")
在django-session表中过滤session-key=random-str的记录进行update
else:
1.生成一个随机字符串
2.向django-session表中插入数据
3.响应set_cookie:{"sessionid": }
'''
return redirect("/index_session/")
else:
return HttpResponse("error")
def index_session(request):
'''
request.session
1.request.COOKIE.get("sessionid")
2.在django-session表中过滤session-key
3.取出过滤记录的session-data反序列化数据字典 {"susername":"egon","sis_login":True}
'''
sis_login = request.session.get("sis_login")
if not sis_login:
return redirect("/login_session/")
else:
shangpin = "香蕉"
shangpin_list = ["苹果", "荔枝", "榴莲"]
name = request.session.get("susername")
return render(request, "index.html", {"shangpin": shangpin,
"shangpin_list": shangpin_list,
"name": name})
def logout(request):
'''
1 request.COOKIE.get("sessionid") :23423hkjsf890234sd
2 在django-session表过滤session-key=23423hkjsf890234sd的记录删除
3 response.delete_cookie("sessionid")
'''
request.session.flush()
return redirect("/login_session/")
3.用户认证组件
前提:使用django自带的用户表 auth_user
插入记录命令:python manage.py createsuperuser
引入from django.contrib import auth
1.auth.authenticate(username=user,password=pwd) 查询语句
2.auth.login(request,user_obj) 保存用户状态信息
request.user:全局变量。模板,视图直接可以使用
3.auth.logout(request) 注销
4.User.objects.create_user(username=user,password=pwd) 注册 from django.contrib.auth.models import User
5.user = User.objects.get(username=request.user.username)
user.set_password(raw_password="555")
from django.shortcuts import render,redirect,HttpResponse # Create your views here.
from django.contrib import auth def login(request):
if request.method == "GET":
return render(request,"login.html")
else:
user = request.POST.get("user")
pwd = request.POST.get("pwd")
# 数据库查询该用户是否存在
user_obj = auth.authenticate(username=user,password=pwd)
if user_obj:
# 保存用户状态信息
auth.login(request,user_obj) # request.session["user_id"]=user_obj.pk
return redirect("/index/")
else:
return redirect("/login/") def index(request):
'''
print(request.user) # 默认匿名用户对象 AnonymousUser
print(request.user.id) # None
print(request.user.username) # ""
print(request.user.is_active) # False '''
if not request.user.is_authenticated:
return redirect("/login/")
name = request.user.username
return render(request,"index.html",locals()) def logout(request):
auth.logout(request)
return redirect("/login/") from django.contrib.auth.models import User
def reg(request):
if request.method =="GET":
return render(request,"reg.html")
else:
user = request.POST.get("user")
pwd = request.POST.get("pwd")
User.objects.create_user(username=user,password=pwd)
return redirect("/login/") def set_password(request):
user = User.objects.get(username=request.user.username)
user.set_password(raw_password="")
user.save()
return redirect("/login/")
user.save()
cookie、session与用户认证组件的更多相关文章
- Django组件 - cookie、session、用户认证组件
一.cookie 1.会话跟踪技术 1)什么是会话跟踪技术 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话 ...
- cookie,session,用户认证组件
一. 绘画跟踪技术 在客户端与服务端的一次会务中,多次的请求与相应,HTTP协议是无状态协议,也就是说每个请求都是独立的!无法记录前一次请求的状态.会话跟踪技术即能够实现多次回话间信息共享的作用,HT ...
- python 全栈开发,Day79(Django的用户认证组件,分页器)
一.Django的用户认证组件 用户认证 auth模块 在进行用户登陆验证的时候,如果是自己写代码,就必须要先查询数据库,看用户输入的用户名是否存在于数据库中: 如果用户存在于数据库中,然后再验证用户 ...
- 061.Python前端Django组件用户认证组件
一 auth认证组件 在使用pymysql,数据库迁移的时候.,默认生成有十张表如下 查看author_user表结构 mysql> desc auth_user; +------------- ...
- web框架开发-Django用户认证组件
可以用认证组件做什么 针对session的缺陷, 跟新数据时,不跟新key键, 用户认证组件是删除后再重建 用户认证组件很多功能可以直接使用 利用用户认证表(auth_user,通过Django自己创 ...
- django - 总结 - 用户认证组件
用户认证组件 from django.contrib import auth 从auth_user表中获取对象,没有返回None,其中密码为密文,使用了加密算法 user = auth.authent ...
- 10.Django用户认证组件
用户认证组件: 功能:用session记录登录验证状态: 前提:用户表,django自带的auth_user 创建超级用户:python manage.py createsuperuser ...
- Django用户认证组件
用户认证 主要分两部分: 1.auth模块 from django.contrib import auth 2.User对象 from django.contrib.auth.models imp ...
- django的用户认证组件
DataSource:https://www.cnblogs.com/yuanchenqi/articles/9064397.html 代码总结: 用户认证组件: 功能:用session记录登录验证状 ...
随机推荐
- CentOS6安装MySQL开启远程登录
Centos6安装MySQL 检测下系统有没有自带的mysql:yum list installed | grep mysql 如果已经有的话执行命令 yum -y remove mysql-libs ...
- JavaScript:学习笔记(10)——XMLHttpRequest对象
JavaScript:学习笔记(10)——XMLHttpRequest对象 XHR对象 使用XMLHttpRequest (XHR)对象可以与服务器交互.您可以从URL获取数据,而无需让整个的页面刷新 ...
- 钩子(hook)
钩子(hook)编程 钩子(hook)编程 一.钩子介绍 1.1钩子的实现机制 钩子英文名叫Hook,是一种截获windows系统中某应用程序或者所有进程的消息的一种技术.下图是windows ...
- Haproxy+keepalived高可用集群实战
1.1 Haproxy+keepalived高可用集群实战 随着互联网火热的发展,开源负载均衡器的大量的应用,企业主流软件负载均衡如LVS.Haproxy.Nginx等,各方面性能不亚于硬件负载均衡 ...
- C#中HttpWebRequest、WebClient、HttpClient的使用
HttpWebRequest: 命名空间: System.Net,这是.NET创建者最初开发用于使用HTTP请求的标准类.使用HttpWebRequest可以让开发者控制请求/响应流程的各个方面,如 ...
- centos7安装php7.3的redis扩展(不是redis服务!)
PHP其他扩展加装扩展也是一样的步骤~ PHP官网下载redis扩展: http://pecl.php.net/package/redis 稳定版吧: [root@wf ~]# wget http:/ ...
- 20191031:GIL全局解释锁
20191031:GIL全局解释锁 总结关于GIL全局解释锁的个人理解 GIl全局解释锁,本身不是Python语言的特性,而是Python语言底层的c Python解释器的一个特性.在其他解释器中是没 ...
- PAT(B) 1081 检查密码(Java)
题目链接:1081 检查密码 (15 point(s)) 题目描述 本题要求你帮助某网站的用户注册模块写一个密码合法性检查的小功能.该网站要求用户设置的密码必须由不少于6个字符组成,并且只能有英文字母 ...
- MySQL8.0新特性总览
1.消除了buffer pool mutex (Percona的贡献) 2.数据字典全部采用InnoDB引擎存储,支持DDL原子性.crash safe.metadata管理更完善(可以利用ibd2s ...
- DNS 解析
DNS即为Domain Name System的缩写形式,就是所谓的域名系统,它是互联网的一项服务.它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网. 如果想访问某个网站( ...