Django-ORM+用户+注册/登录/登出

2025-09-03

因为这几章都是一些基础的知识,我们尽量快一点整出一个可用的小程序,防止三天打鱼两天晒网,拖久了就不想搞了,细节优化后续再说。今天的用户注册、登录、登出还比较糙,明天优化完善。

ORM

该死的缩写、该死的名词~

ORM(Object Relational Mapping)是对象关系映射,用于将面向对象编程语言中的类与关系型数据库中的表进行映射。通过这种映射,开发者可以使用面向对象的方式操作数据库,而无需直接编写SQL语句。

换句话来说,就是不用蠢蠢的写SQL语句了,我们可以python撸数据库相关的代码!

在之前创建的customer子应用目录下,有个models,这个可不是深度学习的models,这个可以理解为数据库的表。我们新建一个最简单的Customer类。

from django.db import models

class Customer(models.Model):
    id = models.AutoField(primary_key=True)  # 自增主键
    name = models.CharField(max_length=100, black=False, null=False)
    email = models.EmailField(unique=True, blank=True, null=True)
    phone = models.CharField(max_length=15, blank=True, null=True)
    address = models.CharField(max_length=255, blank=True, null=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.name

然后记得把这个子应用加入主项目里面。就是mycrm/settings.py里的这段代码:

INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "customer",
]

然后就是数据迁移:

(mycrm) PS D:\mycrm\CRM> python manage.py makemigrations
(mycrm) PS D:\mycrm\CRM> python manage.py migrate    

然后数据库里就可以看到啦!

用户表

之前看知乎老哥推荐先学django时提到,可以白嫖一个django的用户表。诺,现在就来白嫖了,不用自己去写。

Django 已经为我们定义好了一个用户模型(User),我们可以直接使用它。

不过我们需要创建一个超级管理员:

python manage.py createsuperuser 
# 会出现如下内容,按照要求填写用户名、邮箱、密码即可。
Username (leave blank to use '13989'): 13989
Email address: 1398943200@qq.com
Password: 
Password (again): 
Superuser created successfully.

然后我们看到如下页面:

然后我们就可以插入用户了。我们新建销售主管-王五和销售张三。

注册/登录/登出

然后我们需要来设计一个注册、登录、登出的处理。

(1)页面设计。目前暂时放在customer/templates/customer下,包括home.html/login.html/register.html

(2)**逻辑代码。**在customer/views下,输入如下代码:

def register_view(request):
    if request.method == "POST":
        username = request.POST["username"]
        password = request.POST["password"]
        if User.objects.filter(username=username).exists():
            messages.error(request, "用户名已存在")
        else:
            User.objects.create_user(username=username, password=password)
            messages.success(request, "注册成功,请登录!")
            return redirect("login")
    return render(request, "customer/register.html")

def login_view(request):
    if request.method == "POST":
        username = request.POST["username"]
        password = request.POST["password"]
        user = authenticate(request, username=username, password=password)
        if user is not None:
            login(request, user)
            return redirect("home")
        else:
            messages.error(request, "用户名或密码错误")
    return render(request, "customer/login.html")

def logout_view(request):
    logout(request)
    return redirect("login")

def home_view(request):
    return render(request, "customer/home.html")

(3)**路由设置。**在customers/urlsmycrm/urls下分别设置:

from django.urls import path
from . import views

urlpatterns = [
    path("register/", views.register_view, name="register"),
    path("login/", views.login_view, name="login"),
    path("logout/", views.logout_view, name="logout"),
    path("home/", views.home_view, name="home"),
]

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

urlpatterns = [
    path("admin/", admin.site.urls),         # Django 自带后台
    path("", include("customer.urls")),      # 把根路径交给 customer.urls 管理
]

← 返回