" name="sm-site-verification"/>
侧边栏壁纸
博主头像
PySuper博主等级

千里之行,始于足下

  • 累计撰写 203 篇文章
  • 累计创建 14 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录
Web

Django登录、退出登录、登陆后才能访问

PySuper
2020-02-19 / 0 评论 / 0 点赞 / 9 阅读 / 4874 字
温馨提示:
所有牛逼的人都有一段苦逼的岁月。 但是你只要像SB一样去坚持,终将牛逼!!! ✊✊✊

登录方法

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'),
]
0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区