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

相关推荐
baozongwi29 分钟前
CTF常用sql注入(一)联合注入和宽字节
数据库·sql·web安全
freesharer40 分钟前
Zabbix 配置WEB监控
前端·数据库·zabbix
尾巴尖上的阳光1 小时前
ETCD概述--使用/特性/架构/原理
数据库·架构·etcd
关兮月1 小时前
MySQL存储与优化 一、MySQL架构原理
数据库·mysql
我想我不够好。1 小时前
SQL-DQL
数据库·sql
风中的默默1 小时前
《深入浅出MySQL:数据库开发、优化与管理维护(第3版)》
数据库·mysql·数据库开发
一个梦想过上五休二生活的男人1 小时前
Firewalld防火墙(二)
linux·服务器·数据库
PiscesCanon1 小时前
Oracle如何切换temp表空间以及需要注意的点
数据库·oracle
虫小宝1 小时前
Spring Boot中集成MySQL数据库的步骤和技巧
数据库·spring boot·mysql
笔触狂放2 小时前
【Django】网上蛋糕项目商城-首页
后端·python·django