慕课网-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) 收藏 举报
浙公网安备 33010602011771号