慕课网-Django入门到进阶-更适合Python小白的系统课程-第7章Django中的用户权限的基本使用-7-4用户的创建登录注销验证(4)

第7章 Django 中的用户权限的基本使用

7-4 用户的创建登录注销验证(4)

1.在项目 user 下目录 app,修改文件 views.py

#coding:utf-8

from django.contrib.auth.models import User
from django.contrib.auth.hashers import make_password
from django.contrib.auth import login, logout, authenticate
from django.shortcuts import render, redirect, reverse
from django.views import View

class Regist(View):
    TEMPLATE = 'regist.html'

    def get(self, request):
        error = request.GET.get('error', '')
        return render(request, self.TEMPLATE, {'error':error})

    def post(self, request):
        username = request.POST.get('username')
        password = request.POST.get('password')
        check_password = request.POST.get('check_password')
        if password != check_password:
            return redirect('/regist?error=密码不相同')

        exists = User.objects.filter(username=username).exists()
        if exists:
            return redirect('/regist?error=该用户已存在')
        user = User.objects.create_user(
            username=username,
            password=password
        )
        user.save()
        return redirect(reverse('login'))

class Login(View):
    TEMPLATE = 'login.html'
    
    def get(self, request):
        error = request.GET.get('error', '')
        return render(request, self.TEMPLATE, {'error':error})

    def post(self, request):
        username = request.POST.get("username")
        password = request.POST.get("password")
        user = authenticate(username=username, password=password)
        if user:
            login(request, user)
        else:
            return redirect('/login?error=登录失败')
        return redirect('/login')

2.在项目 user 下目录 templates,修改文件 login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>login</title>
    <style>
        form {
            width: 25%;
            margin: 0 auto;
            margin-top: 100px;
            padding: 2%;
            border: 1px solid #cccccc;
            borrder-radius: 8px;
        }

        input {
            display: block;
            width: 100%;
        }

        #submit {
            width: 40px;
        }
    </style>
</head>
<body>
    <form action="{% url 'login' %}" method="post">
        {% csrf_token %}
        <input type="text" name="username" placeholder="用户名" required />
        <input type="password" name="password" placeholder="密码" required />
        <input id="submit" type="submit" value="登录" />
        {{error}}
    </form>
</body>
</html>

3.测试

4.在项目 user 下目录 app,修改文件 views.py,拓展错误提示

#coding:utf-8

from django.contrib.auth.models import User
from django.contrib.auth.hashers import make_password
from django.contrib.auth import login, logout, authenticate
from django.shortcuts import render, redirect, reverse
from django.views import View

class Regist(View):
    TEMPLATE = 'regist.html'

    def get(self, request):
        if request.user.is_authenticated:
            return redirect(reverse('login'))
        error = request.GET.get('error', '')
        return render(request, self.TEMPLATE, {'error':error})

    def post(self, request):
        username = request.POST.get('username')
        password = request.POST.get('password')
        check_password = request.POST.get('check_password')
        if password != check_password:
            return redirect('/regist?error=密码不相同')

        exists = User.objects.filter(username=username).exists()
        if exists:
            return redirect('/regist?error=该用户已存在')
        user = User.objects.create_user(
            username=username,
            password=password
        )
        user.save()
        return redirect(reverse('login'))

class Login(View):
    TEMPLATE = 'login.html'
    
    def get(self, request):
        error = request.GET.get('error', '')
        return render(request, self.TEMPLATE, {'error':error})

    def post(self, request):
        username = request.POST.get("username")
        password = request.POST.get("password")

        exists = User.objects.filter(username=username).exists()
        if not exists:
            return redirect('login/?error=没有该用户')

        user = authenticate(username=username, password=password)
        if user:
            login(request, user)
        else:
            return redirect('/login?error=密码错误')
        return redirect('/login')

5.在项目 user 下目录 app,修改文件 views.py,添加退出登录

from django.contrib.auth.models import User
from django.contrib.auth.hashers import make_password
from django.contrib.auth import login, logout, authenticate
from django.shortcuts import render, redirect, reverse
from django.views import View

class Regist(View):
    TEMPLATE = 'regist.html'

    def get(self, request):
        if request.user.is_authenticated:
            return redirect(reverse('login'))
        error = request.GET.get('error', '')
        return render(request, self.TEMPLATE, {'error':error})

    def post(self, request):
        username = request.POST.get('username')
        password = request.POST.get('password')
        check_password = request.POST.get('check_password')
        if password != check_password:
            return redirect('/regist?error=密码不相同')

        exists = User.objects.filter(username=username).exists()
        if exists:
            return redirect('/regist?error=该用户已存在')
        user = User.objects.create_user(
            username=username,
            password=password
        )
        user.save()
        return redirect(reverse('login'))

class Login(View):
    TEMPLATE = 'login.html'
    
    def get(self, request):
        error = request.GET.get('error', '')
        return render(request, self.TEMPLATE, {'error':error})

    def post(self, request):
        username = request.POST.get("username")
        password = request.POST.get("password")

        exists = User.objects.filter(username=username).exists()
        if not exists:
            return redirect('login/?error=没有该用户')

        user = authenticate(username=username, password=password)
        if user:
            login(request, user)
        else:
            return redirect('/login?error=密码错误')
        return redirect('/login')

class LogoutUser(View):
    def get(self, request):
        logout(request)
        return redirect(reverse('login'))

6.在项目 user 下目录 app,修改文件 urls.py

from django.urls import path
from .views import Regist, Login, LogoutUser

urlpatterns = [
    path('regist', Regist.as_view(), name='regist'),
    path('login', Login.as_view(), name='login'),
    path('logout', LogoutUser.as_view(), name='login'),
]

7.在项目 user 下目录 templates,修改文件 login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>login</title>
    <style>
        form {
            width: 25%;
            margin: 0 auto;
            margin-top: 100px;
            padding: 2%;
            border: 1px solid #cccccc;
            borrder-radius: 8px;
        }

        input {
            display: block;
            width: 100%;
        }

        #submit {
            width: 40px;
        }
    </style>
</head>
<body>
    {% if not user.is_authenticated %}
        <form action="{% url 'login' %}" method="post">
            {% csrf_token %}
            <input type="text" name="username" placeholder="用户名" required />
            <input type="password" name="password" placeholder="密码" required />
            <input id="submit" type="submit" value="登录" />
            {{error}}
        </form>
    {% else %}
        <a href="{% url 'logout' %}">退出登录</a>
    {% endif %}
</body>
</html>

8.测试

9.创建超级管理员

python manage.py createsuperuser

10.测试

 

posted on 2020-02-12 10:22  herisson_pan  阅读(9)  评论(0)    收藏  举报

导航