实现步骤
- 准备登录Django模板表单
- 设计用户模型
- 添加用户的同步登陆
- 添加登录拦截
- 实现退出登录的功能
用户登录
步骤一:认证用户
user = authenticate(username='john',possword='secret')
步骤二:判断认证后的用户是否为None
用户不为None则表示用户认证通过
步骤三:调用login函数登录用户
login(request,user,backend=None)
用户退出
使用logout函数退出当前登录的用户
from django.contrib.auth import logout def logout_view(request): logout(request)
模板中登录html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户登录</title>
<style type="text/css">
.errorlist {
color: #f00;
}
</style>
</head>
<body>
<h3>用户登录</h3>
<form action="." method="post">
{% csrf_token %}
{# {{ form.as_p }}#}
<div>
<!-- 用户名 -->
{{ form.username.label }}
{{ form.username }}
{{ form.username.errors.as_text }}
</div>
<div>
<!-- 密码 -->
{{ form.password.label }}
{{ form.password }}
{{ form.password.errors.as_text }}
</div>
<div>
{{ form.non_field_errors.as_text }}
</div>
<input type="submit" value="登录">
</form>
</body>
</html>
模板中用户信息html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户的基本信息</title>
</head>
<body>
<p>
当前登录的用户是:{{ user.username }}
</p>
{% if user.is_authenticated %}
<a href="/accounts/user/logout/">退出登录</a>
{% endif %}
</body>
</html>
表单forms.py
class LoginForm(forms.Form):
""" 登录表单 """
username = forms.CharField(label='用户名',
max_length=100,
required=False,
help_text='使用帮助',
initial='admin')
password = forms.CharField(label='密码', max_length=200, min_length=6,
widget=forms.PasswordInput)
def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs)
# 当前登录的用户
self.user = None
def clean_username(self):
""" 验证用户名 hook 钩子函数 """
username = self.cleaned_data['username']
pattern = r'^1[0-9]{10}$'
if not re.search(pattern, username):
raise forms.ValidationError('手机号%s输入不正确',
code='invalid_phone',
params=(username, ))
return username
def clean(self):
data = super().clean()
print(data)
# 如果单个字段有错误,直接返回,不执行后面的验证
if self.errors:
return
# username = data['username']
# password = data['password']
username = data.get('username', None)
password = data.get('password', None)
user = authenticate(username=username,password=password)
if user is None:
raise forms.ValidationError('用户名或者密码不正确')
else:
if not user.is_active:
raise forms.ValidationError('该用户已被禁用')
self.user = user
def do_login(self,request):
"""执行用户登录"""
user = self.user
login(request,user)
# 修改用户登录的时间
user.last_login = now()
user.save()
# 保存登录历史
return user
视图views.py
from django.contrib.auth import logout
from django.contrib.auth.decorators import login_required
from django.shortcuts import render, redirect
# Create your views here.
from accounts.forms import LoginForm
def user_login(request):
""" 用户登录 """
if request.method == 'POST':
form = LoginForm(data=request.POST)
if form.is_valid():
print('表单验证通过')
form.do_login(request)
else:
print(form.errors)
else:
form = LoginForm()
return render(request, 'user_login.html', {
'form': form
})
@login_required(login_url='/accounts/user/login/')
def user_info(request):
""" 用户信息 """
# print(request.user)
return render(request, 'user_info.html')
def user_logout(request):
"""退出登录"""
logout(request)
return redirect('/accounts/user/info/')
本文介绍了使用Django实现用户登录与退出功能的步骤,包括准备登录模板表单、设计用户模型、添加同步登陆和登录拦截、实现退出登录等。还给出了用户登录的认证步骤及代码,以及用户退出的函数使用,同时提及了模板和表单、视图文件。

被折叠的 条评论
为什么被折叠?



