码迷,mamicode.com
首页 > 其他好文 > 详细

Django-基于session的登录

时间:2020-12-05 10:54:31      阅读:9      评论:0      收藏:0      [点我收藏+]

标签:order   inpu   BMI   rev   request   python   认证   return   一个   

基于session写一个登录认证装饰器,四个视图(登录,退出,订单,用户信息),使用cbv

一、路由

    path(‘‘, views.Login.as_view(),name=‘login‘),
    path(‘out/‘, views.Out.as_view()),
    path(‘userinfo/‘, views.Userinfo.as_view()),
    path(‘order/‘, views.Order.as_view()),

二、视图

from django.shortcuts import render, HttpResponse, redirect,reverse
from django.views import View
from django.utils.decorators import method_decorator


def login_auth(func):
    def inner(request, *args, **kwargs):
        session = request.session.get(‘name‘)
        if session:
            res = func(request, *args, **kwargs)
            return res
        else:
            path = request.get_full_path()
            return redirect(reverse(‘login‘)+‘?returnUrl=%s‘ %path)
    return inner


class Login(View):
    def get(self,request):
        return render(request, ‘login.html‘)

    def post(self,request):
        username = request.POST.get("username")
        passwd = request.POST.get("passwd")
        if username == ‘yang‘ and passwd == ‘123‘:
            returnUrl = request.GET.get("returnUrl")
            request.session["name"] = ‘yang‘
            if returnUrl:
                return redirect(returnUrl)
            else:
                return redirect(‘/userinfo/‘)
        else:
            return HttpResponse(‘账号或密码错误‘)


class Out(View):
    def get(self,request):
        return render(request, ‘out.html‘)


@method_decorator(login_auth,name=‘get‘)
class Userinfo(View):
    def get(self, request):
        return render(request, ‘userinfo.html‘)

    def post(self, request):
        del self.request.session[‘name‘]
        return render(request, ‘out.html‘)


@method_decorator(login_auth,name=‘get‘)
class Order(View):
    def get(self, request):
        return render(request, ‘order.html‘)

    def post(self, request):
        del self.request.session[‘name‘]
        return render(request, ‘out.html‘)

三、模板

1.login

<div>
    <form action="" method="post">
       <p>用户名<input type="text" name="username"></p>
       <p>密码<input type="password" name="passwd"></p>
        <input type="submit">
    </form>
</div>

2.order

<h1>订单信息</h1>
<form action="" method="post">
    <input type="submit" value="退出">
</form>

3.userinfo

<h1>用户信息</h1>
<form action="" method="post">
    <input type="submit" value="退出">
</form>

4.out

<h1>退出成功</h1>

Django-基于session的登录

标签:order   inpu   BMI   rev   request   python   认证   return   一个   

原文地址:https://www.cnblogs.com/chiyun/p/14066543.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!