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;
            }
          });

相关