创建一个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/ 进行登录。

相关推荐
AOwhisky1 小时前
MySQL 学习笔记(第四期):SQL 语言之多表查询
linux·运维·网络·数据库·笔记·学习·mysql
小红卒2 小时前
mysql之udf提权
数据库·mysql·网络安全
Trouvaille ~2 小时前
【Redis篇】Redis 哨兵(Sentinel):高可用自动故障转移
数据库·redis·缓存·中间件·sentinel·高可用·哨兵
qfljg2 小时前
oracle 迁移到postgres
数据库·oracle
giaz14n9X3 小时前
Redis 分布式锁进阶第五十七篇
数据库·redis·分布式
剑神一笑3 小时前
Linux ls 命令深度解析:从目录遍历到颜色输出的实现原理
linux·服务器·数据库
Maynor9963 小时前
Codex API 网关迁移与流量优化实战
数据库·oracle
WyCAGy8ij4 小时前
Redis 分布式锁进阶第二篇讲解
数据库·redis·分布式
南极企鹅4 小时前
MySQL的两大支柱:undo Log&redo log
数据库·mysql·oracle
智航GIS4 小时前
ArcGIS大师之路500技---078文件数据库的加密与解密
数据库·arcgis