创建一个Django用户认证系统

目录

1、Django

Django 是一个由 Python 编写的高级 Web 框架 ,旨在快速开发和干净、实用的设计。它鼓励使用模块化和可复用的代码,使得开发和维护复杂的网站变得更加容易
特点:
1. 快速开发:

Django 允许开发者在很短的时间内从设计到成品。
2. 可重用性:

Django 提供了大量的可重用代码库(Django apps),这些库可以轻松地集成到项目中。
3. 安全性:

Django 有助于开发者避免常见的安全漏洞,如 SQL 注入、跨站脚本攻击和跨站请求伪造等。
4. 可扩展性:

Django 的模块化设计使其易于扩展和自定义。
5. 良好的文档:

Django 拥有详尽且更新及时的文档,对开发者非常友好

2、Django用户认证系统

Django 自带一个强大的用户认证系统,提供了用户登录、注册、密码管理等功能。这个系统包含以下主要部分:

User 模型:

Django 提供了一个默认的 User 模型,其中包含了基本的用户信息,如用户名、密码、电子邮件等。

可以通过 django.contrib.auth.models.User 访问。

Authentication 视图:

Django 提供了现成的视图用于处理用户登录、注销、密码重置等。

例如,LoginView、LogoutView、PasswordChangeView 和 PasswordResetView。

认证后端 (Authentication Backends):

Django 允许使用自定义认证后端,以支持不同的认证机制(如 LDAP、OAuth 等)。

默认使用的是基于用户名和密码的认证后端。

Form 类:

Django 提供了用于处理用户注册和登录的表单类,如 UserCreationForm 和 AuthenticationForm。

中间件 (Middleware):

Django 提供了 AuthenticationMiddleware,用于将用户的认证状态与每个请求关联起来。

权限和组 (Permissions and Groups):

Django 提供了基于对象级别的权限系统,可以对用户和组分配不同的权限。

使用 Permission 和 Group 模型可以创建复杂的权限管理系统。

3、创建一个django用户认证系统

(1)创建和激活虚拟环境

powershell 复制代码
# 进入项目目录
cd C:\Users\USERNAME\myproject
# 创建虚拟环境
python -m venv myenv
# 激活虚拟环境(Windows)
myenv\Scripts\activate

(2)安装Django

powershell 复制代码
pip install django

(3)创建Django应用

powershell 复制代码
python manage.py startapp myapp

(4)检查Django安装

powershell 复制代码
pip show django

(5)创建Django项目

django-admin startproject myproject
cd myproject

如果你仍然无法运行 django-admin,可能是因为环境变量配置不正确。可以手动将 Python 的 Scripts 文件夹路径添加到系统的 PATH 环境变量中。步骤如下:

打开控制面板,搜索 "环境变量"。

点击 "编辑系统环境变量"。

在系统属性窗口中,点击 "环境变量"。

在系统变量部分找到并选择 Path 变量,然后点击 "编辑"。

点击 "新建",然后添加你的 Python Scripts 文件夹路径,例如 C:\Python39\Scripts 或 C:\Users<你的用户名>\AppData\Local\Programs\Python\Python39\Scripts。

确认并保存所有更改。

(5)配置自定义用户模型

python 复制代码
from django.contrib.auth.models import AbstractUser
from django.db import models
class CustomUser(AbstractUser):
    phone_number = models.CharField(max_length=15, blank=True, null=True)

from django.contrib.auth.models import AbstractUser

这行代码从 Django 的认证框架中导入了 AbstractUser 类。AbstractUser 是一个抽象基类,提供了完整的用户认证系统所需的字段和方法。

from django.db import models

这行代码导入了 Django 的模型模块,模型是 Django 中用于定义数据库表结构的类

class CustomUser(AbstractUser)

这行代码定义了一个名为 CustomUser 的类,该类继承自 AbstractUser。继承 AbstractUser 意味着 CustomUser 将拥有 AbstractUser 提供的所有字段和方法。

phone_number = models.CharField(max_length=15, blank=True, null=True)

这行代码为 CustomUser 类添加了一个名为 phone_number 的新字段。该字段是一个字符字段,最大长度为 15,可以为空 (blank=True 表示表单验证时可以为空,null=True 表示数据库中该字段可以存储空值)。

(6)更新settings.py文件

python 复制代码
INSTALLED_APPS = [
    # ... 其他已安装的应用 ...
    'myapp',
    'django.contrib.auth',
    'django.contrib.contenttypes',
]
AUTH_USER_MODEL = 'myapp.CustomUser'

(7)创建和应用迁移

powershell 复制代码
python manage.py makemigrations
python manage.py migrate

(8)创建注册和登录视图

python 复制代码
from django.contrib.auth.forms import UserCreationForm#这是Django自带的一个表单类,用于创建新用户。它包含了用户名、密码和密码确认字段
from django.urls import reverse_lazy
from django.views import generic
#用户注册页面
class SignUpView(generic.CreateView):
    form_class = UserCreationForm#指定使用UserCreationForm表单
    #reverse_lazy是Django URL处理的一部分,reverse_lazy用于延迟计算URL直到它真正需要的时候。这里用于在用户成功注册后重定向到登录页面
    success_url = reverse_lazy('login')#指定表单提交成功后重定向的URL,这里重定向到login页面。
    template_name = 'registration/signup.html'#指定渲染的模板文件,这里是registration/signup.html

from django.contrib.auth.views import LoginView

class CustomLoginView(LoginView):
    template_name = 'registration/login.html'

(9)创建url配置

在 myapp/urls.py 文件中定义 URL 路径:

python 复制代码
from django.urls import path
from .views import SignUpView, CustomLoginView

urlpatterns = [
    path('signup/', SignUpView.as_view(), name='signup'),
    path('login/', CustomLoginView.as_view(), name='login'),
]

在 myproject/urls.py 文件中包含应用的 URL 路径:

python 复制代码
from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('admin/', admin.site.urls),
    path('accounts/', include('myapp.urls')),
]

(10)创建模板

创建模板文件夹和模板文件:

powershell 复制代码
mkdir -p myapp/templates/registration

创建 myapp/templates/registration/signup.html 文件:

html 复制代码
<!DOCTYPE html>
<html>
<head>
    <title>Sign Up</title>
</head>
<body>
    <h2>Sign Up</h2>
    <form method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Sign Up</button>
    </form>
</body>
</html>

(11)运行服务器

powershell 复制代码
python manage.py runserver

(12)在浏览器中访问http://127.0.0.1:8000/accounts/signup/ 进行注册,访问 http://127.0.0.1:8000/accounts/login/ 进行登录。

相关推荐
好奇的菜鸟1 小时前
如何在IntelliJ IDEA中设置数据库连接全局共享
java·数据库·intellij-idea
tan180°1 小时前
MySQL表的操作(3)
linux·数据库·c++·vscode·后端·mysql
Hello.Reader3 小时前
Redis 延迟排查与优化全攻略
数据库·redis·缓存
简佐义的博客3 小时前
破解非模式物种GO/KEGG注释难题
开发语言·数据库·后端·oracle·golang
爬山算法3 小时前
MySQL(116)如何监控负载均衡状态?
数据库·mysql·负载均衡
老纪的技术唠嗑局6 小时前
OceanBase PoC 经验总结(二)—— AP 业务
数据库
阿里云大数据AI技术7 小时前
OpenSearch 视频 RAG 实践
数据库·人工智能·llm
m0_623955669 小时前
Oracle使用SQL一次性向表中插入多行数据
数据库·sql·oracle
阿蒙Amon10 小时前
C#读写文件:多种方式详解
开发语言·数据库·c#
东窗西篱梦10 小时前
Redis集群部署指南:高可用与分布式实践
数据库·redis·分布式