django authentication 登录注册的实现示例

 更新时间:2024年11月26日 10:47:11   作者:paul_chen21  
本文主要介绍了使用Django内置的authentication功能实现用户注册和登录功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言

之前,写了django制作简易登录系统,这次利用django内置的authentication功能实现注册、登录

可参考之前的文章:Django制作简易注册登录系统

一、django配置

python包具体配置见之前的文章,和之前一样,注释掉跨域,引入mysql
authentication需要额外引入redis

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://ip:6379",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    },
    "session": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://ip:6379/1",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "CONNECTION_POOL_KWARGS": {
                "max_connections": 100
            }
        }
    }
}
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
SESSION_CACHE_ALIAS = "session"
SESSION_COOKIE_AGE = 500

二、后端实现

1.新建app

python manage.py startapp app名称

2.编写view

代码如下(示例):

# Create your views here.

from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.models import User
from django.http import JsonResponse
from django.shortcuts import redirect
from django.shortcuts import render


def login1(request):
    if request.method == 'GET':
        print("GET")
        return render(
            request,
            'login.html',
        )

    elif request.method == 'POST':
        print("POST")
        # 获取参数
        user_name = request.POST.get('username', '')
        pwd = request.POST.get('password', '')

        # 用户已存在
        if User.objects.filter(username=user_name):
            # 使用内置方法验证
            user = authenticate(username=user_name, password=pwd)
            print(user)
            # 验证通过
            if user:
                # 用户已激活
                if user.is_active:
                    login(request, user)
                    request.session["current_user"] = user.username  # 将用户名存储在session中
                    request.session.set_expiry(0)
                    return render(request, "index.html")
                # 未激活
                else:
                    return JsonResponse({
                        'code': 403,
                        'msg': '用户未激活'
                    })

            # 验证失败
            else:
                return JsonResponse({
                    'code': 403,
                    'msg': '用户认证失败'
                })

        # 用户不存在
        else:
            return redirect('register')
    else:
        return render(request, 'login.html')


def register(request):
    if request.method == "GET":
        return render(request, "register.html")
    elif request.method == "POST":
        username = request.POST.get('username', '')
        pwd = request.POST.get('password', '')
        if User.objects.filter(username=username):
            return JsonResponse({
                'code': 200,
                'msg': 'user exists'
            })
        else:
            user = User.objects.create_user(username=username, password=pwd)
            return JsonResponse({
                'code': 200,
                'msg': '注册成功,去登陆'
            })
    else:
        return render(request, 'register.html')


def logout1(request):
    logout(request)
    request.session.clear()
    return redirect("index")


def index(request):
    return render(request, "index.html")

3.配置路由

在app中新建urls.py

from django.urls import path
from loginapp import views
from loginapp.views import index, login1, register, logout1
urlpatterns = [
    path('', index, name='index'),  # 定义根路径'/'到index视图的映射
    path('login/', login1, name='login'),
    path('logout/', logout1, name='logout'),
    path('register/', register, name='register'),
]

主路由(刚建完项目时的那个目录下)修改如下

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('', include('app名称.urls')),
    path('admin/', admin.site.urls),
]

三、前端编写

1、index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Home</title>
</head>
<body>
    {% if request.session.current_user %}
        <h1>Welcome, {{ request.session.current_user }}!</h1>
        <p>You are logged in.</p>
        <a href="{% url 'logout' %}" rel="external nofollow" >Logout</a>
    {% else %}
        <h1>Welcome, Guest!</h1>
        <p>Please <a href="{% url 'login' %}" rel="external nofollow"  rel="external nofollow" >Login</a> or <a href="{% url 'register' %}" rel="external nofollow"  rel="external nofollow" >Register</a>.</p>
    {% endif %}
</body>
</html>

在这里插入图片描述

2、register.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Register</title>
</head>
<body>
    <h1>Register</h1>
    <form method="post" action="{% url 'register' %}">
        {% csrf_token %}
        <label for="username">Username:</label>
        <input type="text" id="username" name="username" required><br><br>
        <label for="password">Password:</label>
        <input type="password" id="password" name="password" required><br><br>
        <button type="submit">Register</button>
    </form>
    <p>Already have an account? <a href="{% url 'login' %}" rel="external nofollow"  rel="external nofollow" >Login here</a>.</p>
</body>
</html>

3、 login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Login</title>
</head>
<body>
    <h1>Login</h1>
    <form method="post" action="{% url 'login' %}">
        {% csrf_token %}
        <label for="username">Username:</label>
        <input type="text" id="username" name="username" required><br><br>
        <label for="password">Password:</label>
        <input type="password" id="password" name="password" required><br><br>
        <button type="submit">Login</button>
    </form>
    <p>Don't have an account? <a href="{% url 'register' %}" rel="external nofollow"  rel="external nofollow" >Register here</a>.</p>
</body>
</html>

在这里插入图片描述

可以看到登陆后,欢迎<用户名>用户

总结

用户的认证内容存储在session中,我设置的过期时间是5分钟。
没有对出错情况进行处理,一旦出错仅展示报错json数据。

到此这篇关于django authentication 登录注册的实现示例的文章就介绍到这了,更多相关django authentication 登录注册内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • pytorch简介

    pytorch简介

    Pytorch是torch的python版本,是由Facebook开源的神经网络框架,专门针对 GPU 加速的深度神经网络(DNN)编程。这篇文章给大家介绍pytorch的相关知识,感兴趣的朋友一起看看吧
    2020-11-11
  • Python中函数的创建与调用你了解吗

    Python中函数的创建与调用你了解吗

    这篇文章主要为大家详细介绍了Python中函数的创建与调用,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • PyTorch读取Cifar数据集并显示图片的实例讲解

    PyTorch读取Cifar数据集并显示图片的实例讲解

    今天小编就为大家分享一篇PyTorch读取Cifar数据集并显示图片的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Pycharm无法打开双击没反应的问题及解决方案

    Pycharm无法打开双击没反应的问题及解决方案

    这篇文章主要介绍了Pycharm无法打开,双击没反应,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • python机器学习XGBoost梯度提升决策树的高效且可扩展实现

    python机器学习XGBoost梯度提升决策树的高效且可扩展实现

    这篇文章主要为大家介绍了python机器学习XGBoost梯度提升决策树的高效且可扩展实现,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • Python实现合成多张图片到PDF格式

    Python实现合成多张图片到PDF格式

    在日常生活中,经常会遇到需要提交身份证正反面证明资料的情况,而且这些网站大部分只接受pdf格式,这时候我们就需要把身份证正反面两张图片合成为一个pdf文件。本文将为大家提供用Python实现这一要求的方法,需要的可以参考一下
    2022-02-02
  • python交互界面的退出方法

    python交互界面的退出方法

    今天小编就为大家分享一篇python交互界面的退出方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-02-02
  • Python 字符串定义

    Python 字符串定义

    字符串是程序中最常见的数据类型。在Python中,可以使用三种方式定义字符串。单引号、双引号和三引号。
    2009-09-09
  • Python中内建函数的简单用法说明

    Python中内建函数的简单用法说明

    这篇文章主要介绍了Python中内建函数的简单用法说明,包括apply()、filter()、reduce()、map()四个函数的用法讲解,需要的朋友可以参考下
    2016-05-05
  • python如何在word中存储本地图片

    python如何在word中存储本地图片

    这篇文章主要介绍了python如何在word中存储本地图片,想了解docx模块的同学,可以参考下
    2021-04-04

最新评论