12 django 新增产品
1 新建产品app
python manage.py startapp pro
2 setting设置
INSTALLED_APPS = [
'pro', ]
3 新建model
from django.db import models # Create your models here. class Project(models.Model): proj_name = models.CharField(max_length=100, verbose_name='产品名', unique=True) host = models.CharField(max_length=100, verbose_name='host') created_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间') class Meta(object): db_table = "lizi_project" # 定义表名 verbose_name = '产品' # 定义在管理后台显示的名称 verbose_name_plural = verbose_name # 定义复数时的名称(去除复数的s) def __str__(self): # 调用时返回自身的属性,不然都是显示xx object return '{}_{}'.format(self.proj_name, self.host)
4 生成数据库
python manage.py makemigrations pro
python manage.py migrate
5 form校验
from django import forms class ProjectForm(forms.Form): proj_name = forms.CharField(min_length=1, max_length=100, required=True, error_messages={'required': '产品名不能为空', 'min_length': '产品名过短', 'max_length': '产品名超长'}) host = forms.CharField(min_length=1, max_length=100, required=True, error_messages={'required': '产品host不能为空', 'min_length': 'host过短', 'max_length': 'host超长'})
6 view
import json from django.http import JsonResponse from django.views import View from utils.mytoken import login_check from apps.project.form import ProjectForm from utils.get_data import get_target_value from apps.project.models import Project class AddProject(View): @login_check def post(self, request): body = json.loads(request.body) form = ProjectForm(body) if form.is_valid(): proj_name = form.cleaned_data['proj_name'] count_num = Project.objects.filter(proj_name=proj_name).count() # print(count_num) if count_num == 0: # 引入model,对数据库进行操作 Project.objects.create(**form.cleaned_data) result = {'code': 1, 'msg': u'新增产品成功!'} return JsonResponse(result, json_dumps_params={'ensure_ascii':False}) else: result = {'code': -1, 'msg': '产品已存在!'} return JsonResponse(result, json_dumps_params={'ensure_ascii': False}) else: msg = 'message' error_dict = json.loads(form.errors.as_json()) tmp_list = [] error_list = get_target_value(msg, error_dict, tmp_list) # print(error_list) result = {'code': -1, 'msg': error_list[0]} return JsonResponse(result, json_dumps_params={'ensure_ascii':False})
7 urls
# 工程urls urlpatterns = [ path('admin/', admin.site.urls), path('v1/user/', include(('user.urls','user'), 'user')), # 分布式路由,匹配到/v1/user后,到 user urls中找 user 后面的path path('v1/project/', include(('project.urls','project'), 'project')), ] # pro urls urlpatterns = [ path('add', AddProject.as_view(), name='add'), ]
8 admin后台
from django.contrib import admin from project.models import Project # Register your models here. class PorjectAdmin(admin.ModelAdmin): list_display = ['id', 'proj_name', 'host', 'created_time', 'update_time'] # 显示列 list_display_links = ['proj_name'] # 有链接列 search_fields = ['proj_name'] # 可以模糊检索字段 admin.site.register(Project, PorjectAdmin)
9 前台
- 请求
export const project_add = param => { return fetch(baseurl + '/v1/project/add', { method: 'POST', body: JSON.stringify(param), headers: new Headers({'Content-Type': 'application/json', 'authorization': localStorage.getItem('token')}), }).then(response => { return response.json() }) }
- 页面调用
import {project_add} from "@/api/lizi"; // 新增并确定 saveAdd() { this.$refs.form.validate(valid => { if (valid) { project_add(this.form).then(res => { if (res.code === 1){ console.log(res) this.$message.success("产品新增成功"); this.addVisible = false; }else { this.$message.success("产品新增失败"); this.addVisible = false; } }) } else { this.$message.error("产品信息输入错误"); return false; } });