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与用户认证组件的更多相关文章

  1. Django组件 - cookie、session、用户认证组件

    一.cookie 1.会话跟踪技术 1)什么是会话跟踪技术 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话 ...

  2. cookie,session,用户认证组件

    一. 绘画跟踪技术 在客户端与服务端的一次会务中,多次的请求与相应,HTTP协议是无状态协议,也就是说每个请求都是独立的!无法记录前一次请求的状态.会话跟踪技术即能够实现多次回话间信息共享的作用,HT ...

  3. python 全栈开发,Day79(Django的用户认证组件,分页器)

    一.Django的用户认证组件 用户认证 auth模块 在进行用户登陆验证的时候,如果是自己写代码,就必须要先查询数据库,看用户输入的用户名是否存在于数据库中: 如果用户存在于数据库中,然后再验证用户 ...

  4. 061.Python前端Django组件用户认证组件

    一 auth认证组件 在使用pymysql,数据库迁移的时候.,默认生成有十张表如下 查看author_user表结构 mysql> desc auth_user; +------------- ...

  5. web框架开发-Django用户认证组件

    可以用认证组件做什么 针对session的缺陷, 跟新数据时,不跟新key键, 用户认证组件是删除后再重建 用户认证组件很多功能可以直接使用 利用用户认证表(auth_user,通过Django自己创 ...

  6. django - 总结 - 用户认证组件

    用户认证组件 from django.contrib import auth 从auth_user表中获取对象,没有返回None,其中密码为密文,使用了加密算法 user = auth.authent ...

  7. 10.Django用户认证组件

    用户认证组件: 功能:用session记录登录验证状态: 前提:用户表,django自带的auth_user 创建超级用户:python manage.py createsuperuser       ...

  8. Django用户认证组件

    用户认证 主要分两部分: 1.auth模块   from django.contrib import auth 2.User对象 from django.contrib.auth.models imp ...

  9. django的用户认证组件

    DataSource:https://www.cnblogs.com/yuanchenqi/articles/9064397.html 代码总结: 用户认证组件: 功能:用session记录登录验证状 ...

随机推荐

  1. Fiddler抓取Android手机网络数据包

    也许你也有疑问,如果开发没有完备的接口文档,我如何知道他API的信息? 这时我们就得通过一些抓包工具抓取这些API信息. 常见抓包工具 HTTP抓包工具:Fiddler.Charles.Firebug ...

  2. 用ASP.NET Core 2.0 建立规范的 REST API -- 预备知识1

    什么是REST REST 是 Representational State Transfer 的缩写. 它是一种架构的风格, 这种风格基于一套预定义的规则, 这些规则描述了网络资源是如何定义和寻址的. ...

  3. JIRA问题状态已关闭,但是解决结果还是未解决

    自己设置的工作流,状态和解决结果是没有关联的,这时候我们要配置关联关系 1.如下,状态时已关闭,但是解决结果是未解决 . 2.解决方法: 2.1设置-问题-工作流,找到目前在使用的工作流,点击编辑 3 ...

  4. kafka为什么吞吐量高,怎样保证高可用

    1:kafka可以通过多个broker形成集群,来存储大量数据:而且便于横向扩展. 2:kafka信息存储核心的broker,通过partition的segment只关心信息的存储,而生产者只负责向l ...

  5. [.Net] - 使用 iTextSharp 生成基于模板的 PDF,生成新文件并保留表单域

    背景 基于 PDF Template 预填充表单项,生成一份新的 PDF 文件,并保留表单域允许继续修改. 代码段 using iTextSharp.text.pdf; /* Code Snippet ...

  6. Android持久化存储——(包含操作SQLite数据库)

    <第一行代码>读书手札 你可能会遇到的问题:解决File Explorer 中无显示问题 Android中,持久化存储,常见的一共有三种方法实现 (一.)利用文件存储 文件存储是Andro ...

  7. Python类的访问限制

    使用两个_将变量设置为private,访问变量可定义get方法,对变量值修改可定义set方法,修改变量值的时候可检查参数的有效性. class Student(object): #定义一个Studen ...

  8. PAT(B) 1029 旧键盘(Java)字符串

    题目链接:1029 旧键盘 (20 point(s)) 题目描述 旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现.现在给出应该输入的一段文字.以及实际被输入的文字,请你列出肯定坏掉的 ...

  9. AVR单片机教程——闪烁LED

    上次我们把LED点亮了.你可能已经试过把 LED_RED 换成其他灯,也可能已经用 led_on() 把所有LED一起点亮了.但是LED点亮以后,程序就退出了,之后LED一直没有暗,直到没有供电.这一 ...

  10. 【并发】8、借助redis 实现多线程生产消费阻塞队列

    顾名思义这个就是再消费的时候,不是之前的那哥用yield进行线程切换的操作,而是用线程等待阻塞的方式去执行,说实话我感觉效率不一定有之前那个好, 因为我对这种阻塞队列使用的时候,之前有发现阻塞队列,塞 ...