目录
一、将视图里面的modelform类分离出去
二、按模块迁移视图
1、新建views视图文件夹
2、views下新建对应模块文件,并从views.py当中迁移代码
三、删除views.py
四、修改url路由
接上一篇《django项目实战五(django+bootstrap实现增删改查)进阶ModelForm与bootstrap》
知识点:
分解视图内容
一、将视图里面的modelform类分离出去
在utils下新增form.py(也可单独与utils建立平级文件夹方式[内容多时]),将视图的modelform类迁移过来
# -*- coding: utf-8 -*-
# @Time : 2023/2/21 13:38
# @Author : caicloud
# @File : form.py
# @Software: PyCharm
# @Describe:
from django.core.exceptions import ValidationError
from django import forms
from django.core.validators import RegexValidator
from TestManagementSystem import models
from TestManagementSystem.utils.bootstrap import BootStrapModelForm
class DepartModelForm(BootStrapModelForm):
# 限制部门名称的长度,至少为3位
# name = forms.CharField(min_length=3, label='部门名称')
class Meta:
model = models.Department
fields = ["name"]
class UserModelForm(BootStrapModelForm):
# 限制姓名的长度,至少为3位
name = forms.CharField(min_length=3, label='用户名')
# password = forms.CharField(label='密码',validators='这里写正则表达式')
class Meta:
model = models.UserInfo
fields = ["name", "password", "age", "account", "create_time", "gender", "depart"]
class CaseModelForm(BootStrapModelForm):
number = forms.CharField(
label="用例编号",
validators=[RegexValidator(r'^0\d{3}$', '数字必须以0开头的4位数字')],
)
class Meta:
model = models.Case
# fields = ["number", "name", "step", "expect", "actual", "priority", "author", "status", "bug_no"]
fields = "__all__" # 这个表示所有字段
# exclude = ["bug_no"] # 排除字段
# 钩子函数进行判重验证,这个名字注意是clean_加字段名
def clean_number(self):
tex_number = self.cleaned_data['number']
exists = models.Case.objects.filter(number=tex_number).exists()
if exists:
raise ValidationError("用例编号已存在")
return tex_number
class CaseEditModelForm(BootStrapModelForm):
# 控制字段显示,但是不可编辑
number = forms.CharField(disabled=True, label="用例编号")
class Meta:
model = models.Case
fields = ["number", "name", "step", "expect", "actual", "priority", "author", "status", "bug_no"]
# fields = "__all__" # 这个表示所有字段
# exclude = ["bug_no"] # 排除字段
# 钩子函数进行判重验证,这个名字注意是clean_加字段名
def clean_number(self):
# 获取当前编辑那一行的ID,从POST那里获取到了instance
# print(self.instance.pk)
tex_number = self.cleaned_data['number']
exists = models.Case.objects.exclude(id=self.instance.pk).filter(number=tex_number).exists()
if exists:
raise ValidationError("用例编号已存在")
return tex_number
二、按模块迁移视图
1、新建views视图文件夹
2、views下新建对应模块文件,并从views.py当中迁移代码
三、删除views.py
四、修改url路由
"""DjangoDemoOne URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/3.2/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path
from TestManagementSystem.views import user, depart, case
urlpatterns = [
# path('admin/', admin.site.urls),
# 部门管理
path('depart/list/', depart.depart_list),
path('depart/model/form/add/', depart.depart_model_form_add), # 新方法实现
path('depart/delete/', depart.depart_delete),
path('depart/<int:nid>/edit/', depart.depart_edit),
# 用户管理
path('user/list/', user.user_list),
path('user/model/form/add/', user.user_model_form_add), # 新方法实现
path('user/<int:nid>/edit/', user.user_edit),
path('user/<int:nid>/delete/', user.user_delete), # 与部门删除方式不一样
# 用例管理
path('case/list/', case.case_list),
path('case/add/', case.case_add),
path('case/<int:nid>/edit/', case.case_edit),
path('case/<int:nid>/delete/', case.case_delete),
]