登录方法
views.py
from django.contrib.auth import authenticate, login, logout
from django.http import HttpResponse
from django.shortcuts import render, redirect
from front.forms import LoginForm
from django.contrib.auth.decorators import login_required
def my_login(request):
# 如果是GET方法,渲染到登录页面,如果是POST方法,进行登录判断
if request.method == 'GET':
return render(request, 'front/index.html')
else:
form = LoginForm(request.POST)
if form.is_valid():
telephone = form.cleaned_data.get('telephone')
password = form.cleaned_data.get('password')
remember = form.cleaned_data.get('remember')
# 验证账号密码是否正确
user = authenticate(request, username=telephone, password=password)
if user is not None:
# 判断用户是否被冰冻
if user.is_active:
login(request, user)
# 判断是否记住密码
if remember:
# 设置为None,则表示使用全局的过期时间
request.session.set_expiry(None)
else:
# 设置浏览器关闭之后就过期
request.session.set_expiry(0)
# 这里的设置网址有next后缀的处理方法
next_url = request.GET.get('next')
if next_url:
# 重定向到设置好的登录页面
return redirect(next_url)
else:
return HttpResponse("登录成功!")
return HttpResponse("登录成功!")
else:
return HttpResponse("用户已冰冻!")
else:
return HttpResponse("用户名或密码错误!")
else:
return HttpResponse("登录失败!")
新建forms.py
from django.contrib.auth import get_user_model
from django import forms # 注意导入的是django下的forms
class LoginForm(forms.ModelForm):
telephone = forms.CharField(max_length=11)
remeber = forms.IntegerField(required=False)
class Meta:
model = get_user_model()
fields = ['password']
新建index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>首页</title>
<link rel="stylesheet" href="{% static 'index.css' %}">
</head>
<body>
<form action="" method="post">
设置权限,否则页面无法提交数据
<input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}">
用户名:<input type="text", name="telephone">
密 码:<input type="password" name="password">
记住我:<input type="checkbox" name="remember" value="1">
<input type="submit" value="登录">
</form>
</body>
</html>
退出登录
def my_logout(request):
logout(request)
return HttpResponse("退出登录成功!")
登录后访问
有时候,某个视图函数是需要经过登录后才能访问的。那么我们可以通过login_required装饰器来实现。
# 在验证失败后,会跳转到/accounts/login/路由。
# (需要修改为自己的登录页面@login_required(login_url='/login/'))
@login_required(login_url='/login/')
def profile(request):
return HttpResponse("这是个人中心,只有登陆后才能看到!")
urls.py
urlpatterns = [
path('index/', views.index),
path('login/', views.my_login),
path('logout/', views.my_logout, name='logout'),
path('profile/', views.profile, name='profile'),
]
评论区