cookie和 session
cookie
简单方法
from django.shortcuts import render,HttpResponse,redirect
def login(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
email = request.POST.get('email')
if username == 'hcg' and password == '123':
obj = render(request,'home.html')
obj.set_cookie('name','hcg')
return obj
else:
return HttpResponse('登录失败')
return render(request,'login.html')
def index(request):
if request.COOKIES.get('name') == 'hcg':
return HttpResponse('this is index')
return redirect('/login')
def home(request):
return render(request,'home.html')
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{# <form action="" method="POST" novalidate>#}
{# {% csrf_token %}#}
{# <p>{{ fm.user }}{{ fm.errors.user.0 }}</p> <!-- 获取第一个错误 -->#}
{# <p>{{ fm.pwd }}{{ fm.errors.pwd.0 }}</p>#}
{# <p>{{ fm.email }}{{ fm.errors.email.0 }}</p>#}
{# <input type="submit" value="提交" />#}
{# </form>#}
<form action="" method="post">
<p>username:
<input type="text" name="username"></p>
<p>password:
<input type="text" name="password"></p>
<p>email:
<input type="text" name="email"></p>
<input type="submit">
</form>
</body>
</html>
登陆装饰器
from django.shortcuts import render,HttpResponse,redirect
def login_auth(func):
def inner(request,*args,**kwargs):
if request.COOKIES.get('name') == 'hcg':
res = func(request,*args,**kwargs)
return res
else:
return redirect('/login')
return inner
def login(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
email = request.POST.get('email')
if username == 'hcg' and password == '123':
obj = render(request,'home.html')
obj.set_cookie('name','hcg')
return obj
else:
return HttpResponse('登录失败')
return render(request,'login.html')
@login_auth
def index(request):
# if request.COOKIES.get('name') == 'hcg':
# return HttpResponse('this is index')
# return redirect('/login')
return HttpResponse('this is index')
@login_auth
def myinfo(request):
# if request.COOKIES.get('name') == 'hcg':
# return HttpResponse('this is myinfo')
# return redirect('/login')
return HttpResponse('this is myinfo')
进阶
如果之前有访问路径,登陆后重定向到该路径
from django.shortcuts import render,HttpResponse,redirect
def login_auth(func):
def inner(request,*args,**kwargs):
if request.COOKIES.get('name') == 'hcg':
res = func(request,*args,**kwargs)
return res
else:
# 获取当前uri地址
target_uri = request.get_full_path()
print(target_uri)
return redirect(f'/login/?next={target_uri}')
return inner
def login(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
email = request.POST.get('email')
if username == 'hcg' and password == '123':
# 获取登录前uri地址
target_uri = request.GET.get('next')
if target_uri:
obj = redirect(target_uri)
else:
obj = redirect('/home')
obj.set_cookie('name', 'hcg')
return obj
else:
return HttpResponse('登录失败')
return render(request,'login.html')
@login_auth
def index(request):
# if request.COOKIES.get('name') == 'hcg':
# return HttpResponse('this is index')
# return redirect('/login')
return HttpResponse('this is index')
@login_auth
def myinfo(request):
# if request.COOKIES.get('name') == 'hcg':
# return HttpResponse('this is myinfo')
# return redirect('/login')
return HttpResponse('this is myinfo')
def home(request):
return render(request,'home.html')
session
登陆后制定跳转回登陆前访问地址
from django.shortcuts import render,HttpResponse,redirect
def se_login_auth(func):
def inner(request,*args,**kwargs):
if request.session.get('name') == 'ysl':
res = func(request,*args,**kwargs)
return res
else:
# 获取当前uri地址
target_uri = request.get_full_path()
print(target_uri)
return redirect(f'/se_login/?next={target_uri}')
return inner
def se_login(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
email = request.POST.get('email')
if username == 'ysl' and password == '123':
# 获取登录前uri地址
target_uri = request.GET.get('next')
if target_uri:
obj = redirect(target_uri)
else:
obj = redirect('/home')
# obj.set_cookie('name', 'hcg')
request.session['name'] = 'ysl'
return obj
else:
return HttpResponse('登录失败')
return render(request,'login.html')
@se_login_auth
def se_index(request):
# if request.COOKIES.get('name') == 'hcg':
# return HttpResponse('this is index')
# return redirect('/login')
print(request.session['name'])
print(request.session.get('name'))
return HttpResponse('this is se_index')
@se_login_auth
def se_myinfo(request):
# if request.COOKIES.get('name') == 'hcg':
# return HttpResponse('this is myinfo')
# return redirect('/login')
return HttpResponse('this is se_myinfo')
path('home/',views.home,name='home_view'),
path('se_login/',views.se_login),
path('se_index/',views.se_index),
path('se_myinfo/',views.se_myinfo),