zoukankan      html  css  js  c++  java
  • 作业36

    作业36

    session实现登录认证

    注意: 要执行数据库迁移命令,创建django_session表

    项目目录

    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'^home/',views.home),
        url(r'^login/',views.login),
        url(r'^func1/',views.func1),
        url(r'^func2/',views.func2),
        url(r'^func3/',views.func3),
        url(r'^logout',views.logout)
    ]
    

    templates

    =====================func1===============================
    <body>
    <h1>func1</h1>
    <a href="/logout/">注销</a>
    </body>
    =====================func1===============================
    
    
    
    
    
    =====================func2===============================
    <body>
    <h1>func2</h1>
    <a href="/logout/">注销</a>
    </body>
    =====================func2===============================
    
    
    
    
    
    =====================func3===============================
    <body>
    <h1>func3</h1>
    <a href="/logout/">注销</a>
    </body>
    =====================func3===============================
    
    
    
    
    
    =====================home===============================
    <body>
    <p>我是主页</p>
    <a href="/login/">登录</a>
    <a href="/login/">注册</a>
    </body>
    =====================home===============================
    
    
    
    
    
    =====================login===============================
    <body>
    
    <form action="" novalidate method="post">
        {% for form in form_obj %}
            <p>{{ form.label }}:{{ form }}  <span style="color: red">{{ form.errors.0 }}</span></p>
        {% endfor %}
        <button class="btn btn-primary">登录</button>
    </form>
    
    </body>
    =====================login===============================
    

    app01

    views.py

    from django.shortcuts import render, redirect
    from django import forms
    
    
    # Create your views here.
    
    class MyForm(forms.Form):
        username = forms.CharField(max_length=5, required=True)
        password = forms.CharField(max_length=10)
    
    
    def home(request):
        return render(request, 'home.html')
    
    
    # 注释部分为cookie实现的部分
    # def auth(func):
    #     def wrapper(request, *args, **kwargs):
    #         username = request.COOKIES.get('username')
    #         if username:
    #             password = request.COOKIES.get('password')
    #             if username == 'wu' and password == '123':
    #                 res = func(request, *args, **kwargs)
    #                 return res
    #             else:
    #                 return redirect('/login/')
    #         else:
    #             url = request.get_full_path()
    #             return redirect(f'/login/?next={url}')
    #
    #     return wrapper
    #
    #
    # def login(request):
    #     form_obj = MyForm()
    #     if request.method == 'POST':
    #         form_obj = MyForm(request.POST)
    #         url = request.GET.get('next')
    #         if form_obj.is_valid():
    #             username = request.POST.get('username')
    #             password = request.POST.get('password')
    #             if username == 'wu' and password == '123':
    #                 if url:
    #                     obj = redirect(url)
    #                 else:
    #                     obj = redirect('/home/')
    #                 obj.set_cookie('username', username)
    #                 obj.set_cookie('password', password)
    #                 return obj
    #             else:
    #                 form_obj.add_error('password', '密码错误')
    #                 return render(request, 'login.html', locals())
    #
    #     return render(request, 'login.html', locals())
    
    
    
    
    def auth(func):
        def wrapper(request, *args, **kwargs):
            if request.session.get('username'):
                username = request.session.get('username')
                password = request.session.get('password')
                if username == 'wu' and password == '123':
                    res = func(request, *args, **kwargs)
                    return res
            path = request.get_full_path()
            return redirect(f'/login/?next={path}')
    
        return wrapper
    
    
    
    def login(request):
        form_obj = MyForm()
        if request.method == 'POST':
            form_obj = MyForm(request.POST)
            if form_obj.is_valid():
                username = request.POST.get('username')
                password = request.POST.get('password')
                if username == 'wu' and password == '123':
                    request.session['username'] = username
                    request.session['password'] = password
                    url = request.GET.get("next")
                    if url:
                        obj = redirect(url)
                    else:
                        obj = redirect('/home/')
                    return obj
                else:
                    form_obj.add_error('password','密码错误')
        return render(request, 'login.html', locals())
    
    
    @auth
    def func1(request):
        return render(request, 'func1.html')
    
    
    @auth
    def func2(request):
        return render(request, 'func2.html')
    
    
    @auth
    def func3(request):
        return render(request, 'func3.html')
    
    
    @auth
    def logout(request):
        request.session.flush()
        return redirect('/login/')
    
  • 相关阅读:
    使用 git 及 github
    layUi数据表格自动渲染
    Linux下Tomcat重新启动 和查看日志
    禁止页面后退js(兼容各浏览器)
    通俗讲解计算机网络五层协议
    浏览器与服务器交互的过程
    转载 为什么会有前后端分离
    Kubernetes & Docker 容器网络终极之战(十四)
    Kubernetes 配置管理 Dashboard(十三)
    Kubernetes 配置管理 ConfigMap(十二)
  • 原文地址:https://www.cnblogs.com/achai222/p/13062525.html
Copyright © 2011-2022 走看看