2025-09-03
因为这几章都是一些基础的知识,我们尽量快一点整出一个可用的小程序,防止三天打鱼两天晒网,拖久了就不想搞了,细节优化后续再说。今天的用户注册、登录、登出还比较糙,明天优化完善。
该死的缩写、该死的名词~
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/urls和mycrm/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 管理
]