html中使用cookie做登录页面,(26)基于cookie的登陆认证(写入cookie,登陆后所有域下的网页都可访问、登陆成功跳转至用户开始访问的页面,使用装饰器完成所有页面的登陆认证,)...

当一个网站没有登录的时候,用户点击后台会跳转到登录页面,程序登录后自动跳转至用户开始访问的页面,具体做法看下面的案例

views.py

from django.shortcuts import render,HttpResponse,redirect

from app01 import models

'''写一个cookie版的登陆'''

def login_auth(func):

'''这个装饰器给cookie版的登陆项目用'''

# 这里有一个request参数,是因为装饰器值用来装饰视图函数,视图函数的第一个参数就是request

def inner(request,*args,**kwargs):

is_login = request.COOKIES.get('is_login')

# is_login 有值就代表登陆了

if is_login:

# 为什么要写*args,**kwargs,因为有可能urls里面可能是有名分组也可是无名分组,分组出来的值就要放入*args,**kwargs解压

return func(request,*args,**kwargs)

else:

# 表示没有登录重定向到登陆页面

# 获取本次请求的全路径

url=request.get_full_path()

return redirect('/login/?ReturnUrl=%s'%url)

# 直接在跳转的页面地址后面拼接本次请求的全路径即可,注意?后面的ReturnUrl就是给后面登陆成功跳转的函数获取本次路径的变量名

return inner

def login(request):

# 这个是首页登陆页面

if request.method == 'GET':

return render(request,'login.html')

if request.method == 'POST':

name = request.POST.get('name')

pwd = request.POST.get('pwd')

user = models.User.objects.filter(name=name, pwd=pwd).first()

if user:

'''登陆成功写cookie'''

last_url = request.GET.get('ReturnUrl') #获取用户开始访问的路径,这里有可能在用户开始就直接访问登陆页面,会造成后面的路径是空的产生报错

if last_url:

# 如果路径是有的,则登陆后返回前面用户访问的页面

obj = redirect(last_url) #登陆成功返回上次访问的页面

else:

# 如果路径为空,就跳转到自定意义的一个界面,通常一般都是网站的首页

obj = redirect('/order/')

obj.set_cookie('name',user.name)

'''这里is_login就是给其他页面用来判断是否登陆的'''

obj.set_cookie('is_login',True)

return obj

else:

return redirect('/login/')

@login_auth

def order(request):

if request.COOKIES.get('is_login'):

return HttpResponse('你已经登录了,并且成功访问 order 订单页面')

else:

return redirect('/login_cookie/')

@login_auth

def user_info(request):

'''登陆之后才能访问'''

if request.COOKIES.get('is_login'):

return HttpResponse('你已经登陆,成功访问用户信息页面')

else:

return redirect('/login_cookie/')

login.html

登陆的页面

基于cookie的登陆案例

用户名:

密码:

PS:这里为什么不用ajax,因为ajax是不能往浏览器里面写cookie的

order.html

订单页面

我是订单页面

urls.py

from django.conf.urls import url

from django.contrib import admin

from app01 import views

urlpatterns = [

url(r'^admin/', admin.site.urls),

url(r'^$',views.login),

url(r'^login/$',views.login),

url(r'^order/$',views.order),

url(r'^user_info/$',views.user_info)

]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值