基于django开发框架种cookie05-23上

基于代码:

def login(request):
return render(request,"home.html") #给用户一个静态页
@api_view(["POST"])#有页面返回了所以去掉get
def api_login(request):
username = request.POST.get("username")
pwd = request.POST.get("password")
if username is not None and pwd is not None:
if username =='admin'and pwd == "admin":
return render(request,"home.html",context={"username":username})
else:
return render(request, "error.html", context={"msg": "用户名和密码错误"})
else:
return render(request,"error.html",context={"msg":"用户名和密码必填"})
响应回种cookie 请求携带cookie

新内容:响应回种cookie,HttpResponse的方法:
第一个方法:中cookieHttpResponse().set_cookie()#通过响应的cookie回种cookie给请求 这样下次请求就可以带上cookie
需求 登录成功后返回页面 页面携带一个cookie uuid
def login(request):
return render(request,"home.html")
@api_view(["POST"])
def api_login(request):
username = request.POST.get("username")
pwd = request.POST.get("password")
if username is not None and pwd is not None:
if username =='admin'and pwd == "admin":
res = render(request,"home.html",context={"username":username})#返回的url还是login
       res.set_cookie('uuid','1')
       return res
else:
return render(request, "error.html", context={"msg": "用户名和密码错误"})
else:
return render(request,"error.html",context={"msg":"用户名和密码必填"})
验证效果:127.0.0.1:8000/user/api/login  检查下application-cookies

需求二:登录成功后 实现返回首页 用重定向到首页 引入HttpResponseRedirect
from django.http import HttpResponse,JsonResponse,HttpResponseRedirect(状态码)
user/urls文件增加home.htm页面
from django.urls import path
from users import views
urlpatterns = [
path('hello/', views.hello),
path('login/',views.login),
path('home/',views.home),#增加的页面
path('api/login/',views.api_login),
path('api/logout/',views.api_logout)]
user/views文件增加home请求
def home1(request):
  return render(request,'home.html')
@api_view(["POST"])
def api_login(request):
username = request.POST.get("username")
pwd = request.POST.get("password")
if username is not None and pwd is not None:
if username =='admin'and pwd == "admin":
       res = HttpResponseRedirect(‘/user/home’)#重定向到首页
       res.set_cookid('uid',''1)#种cookie
       return res
        else:
return render(request, "error.html", context={"msg": "用户名和密码错误"})
else:
return render(request,"error.html",context={"msg":"用户名和密码必填"})
需求三:返回home首页的时候,home接口需要判断登录状态 cookie是否存在;有就在首页 没有就回到登录 未设置cookie失效实际 默认关闭浏览器cookie失效
def home1(request):
  if request.COOKIES.get('uid') =='1':
    
    return render(request,'home.html')
  else:
    return HttpResponseRedirect(‘/user/login’)
@api_view(["POST"])
def api_login(request):
username = request.POST.get("username")
pwd = request.POST.get("password")
if username is not None and pwd is not None:
if username =='admin'and pwd == "admin":
       res = HttpResponseRedirect(‘/user/home’)#重定向到首页。 重定向到方法
       res.set_cookid('uid',''1)#种cookie
       return res
        else:
return render(request, "error.html", context={"msg": "用户名和密码错误"})
else:
return render(request,"error.html",context={"msg":"用户名和密码必填"})
需求三:上面cookies没加密
def home1(request):
  if request.COOKIES.get('uid') =='1'and request.COOKIE.get('usename')=='admin'and request.COOKIE.get('pwd')=='admin':#因为密码是加密的 所以拿不到密码,只能先解密再加密
    return render(request,'home.html')
  else:
    return HttpResponseRedirect(‘/user/login’)
@api_view(["POST"])
def api_login(request):
username = request.POST.get("username")
pwd = request.POST.get("password")
if username is not None and pwd is not None:
if username =='admin'and pwd == "admin":
       res = HttpResponseRedirect(‘/user/home’)#重定向到首页
       res.set_cookid('uid','1',httponly=True)#种cookie httponly=True木马程序植入都不会拿到cookie信息
       res.set_cookie('username','admin')
       #res.set_cookie('pwd','admin')#种的是明文
       res.set_signed_cookie('pwd','admin')#种的是加密后的密码 #set_signed_cookie有salt
       res.set_signed_cookie('pwd', 'admin','123')#123是盐
       return res
        else:
return render(request, "error.html", context={"msg": "用户名和密码错误"})
else:
return render(request,"error.html",context={"msg":"用户名和密码必填"})
需求四:数据数据用csv 
template文件中增加 是否自动登录
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户登录</title>
</head>
<body>
<form action="/user/api/login" method="post">#映射到了 api_login
<label>用户名:</label><input name="username">
<br>
<label>用户名:</label><input name="pwd">
<br><br>
<label>自动登录:</label><input name="is_login" type="checkbox">
<br><br>
<button type="submit" name="登录">登录</button>
</form>>
</body>
</html>
项目根目录创建一个data.csv文件,数据存储uid 用户名 密码 安装csv插件 settiings->plugins->搜索csv
views文件内容:
def login(request):
return render(request,'login.html')
def home(request):
  if request.COOKIES.get('uid') =='1'and request.COOKIE.get('usename')=='admin'and request.COOKIE.get('pwd')=='admin':#因为密码是加密的 所以拿不到密码,只能先解密再加密
    return render(request,'home.html')
  else:
    return HttpResponseRedirect(‘/user/login’)
@api_view(["POST"])
def api_login(request):
username = request.POST.get("username")
pwd = request.POST.get("password")
if username is not None and pwd is not None:
if username =='admin'and pwd == "admin":
       res = HttpResponseRedirect(‘/user/home’)#重定向到首页
       res.set_cookid('uid','1',httponly=True)#种cookie httponly=True木马程序植入都不会拿到cookie信息
       res.set_cookie('username','admin')
       #res.set_cookie('pwd','admin')#种的是明文
       res.set_signed_cookie('pwd','admin')#种的是加密后的密码 #set_signed_cookie有salt
       res.set_signed_cookie('pwd', 'admin','123')#123是盐
       return res
        else:
return render(request, "error.html", context={"msg": "用户名和密码错误"})
else:
return render(request,"error.html",context={"msg":"用户名和密码必填"})
路由信息:
from django.urls import path
from users import views
urlpatterns = [
path('hello/', views.hello),
path('login/',views.login),
path('home/',views.home),
path('api/login/',views.api_login),
path('api/logout/',views.api_logout)]
读取csv文件的数据:命名为util.py
import csv
def is_login(username, password):
with open('data.csv')as f: # 打开文件存放在f中
for i in csv.reader(f):
# print(i)
if i[1] == username and pwd == i[2]:
return i[0] # 返回用户id
else:
return None
views文件中引入util文件 import util
def login(request):
return render(request,'login.html')
def home(request):
  username = request.COOKIE.get('username')
  try:
  pwd = request.get_signed_cookie('pwd')
  except:
    pwd = None

  if is_login(username,pwd):
    return render(request,'home.html',{'username'=username})
  else:
    return HttpResponseRedirect(‘/user/login’)
@api_view(["POST"])
def api_login(request):
username = request.POST.get("username")
password= request.POST.get("password")
   is_cookie = request.POST.get('is_login')
   if username is not None and password is not None:
      is_av = is_login(username,password)
      if is_av is not None:
        res = HttpResponseRedirect(‘/user/home’)#重定向到首页
        if is_cookie == on:
          res.set_cookid('uid',is_av,httponly=True,max_age=604800)#相对过期时间,expire=’2020-6-30 14:00:00‘绝对过期时间
          res.set_cookie('username',username,max_age=604800)
          res.set_signed_cookie('pwd',password,max_age=604800)#123是盐
      else:
          res.set_cookid('uid',is_av,httponly=True,max_age=300)#相对过期时间,expire=’2020-6-30 14:00:00‘绝对过期时间
          res.set_cookie('username',username,max_age=300)
          res.set_signed_cookie('pwd',password,max_age=300)#123是盐

        
       return res
        else:
return render(request, "error.html", context={"msg": "用户名和密码错误"})
else:
return render(request,"error.html",context={"msg":"用户名和密码必填"})
需求 增加注销
template home.html 增加注销
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>测试平台</title>
</head>
<body>
<h3>欢迎登录测试平台 ,{{ username}}</h3>
<a href="/user/api/logout/">注销</a>>
</body>
</html>

路由urls 增加注销的地址
from django.urls import path
from users import views
urlpatterns = [
path('hello/', views.hello),
path('login/',views.login),
path('home/',views.home),
path('api/login/',views.api_login),
path('api/logout/',views.api_logout)]
views文件中增加 logout接口,目的是删除与登录相关的cookie,跳转到登录页面
@api_view(["POST",”GET“])
def api_logput(request):
  res = HttpResponRedirect('user/login')#重定向到登录 然后删除cookie
  res.delete_cookie('uid')
  res.delete_cookie('username')
  res.delete_cookie('pwd')

return res#返回新的登录页面

  


posted @ 2020-05-29 12:52  钱小多多多  阅读(176)  评论(0)    收藏  举报