博客
关于我
基于Django框架实现前后端分离(二)
阅读量:667 次
发布时间:2019-03-16

本文共 6915 字,大约阅读时间需要 23 分钟。

基于 Django 实现后端 API 开发

模型建立

在 Django 项目中,模型对应于数据库表结构。本应用将使用四个表:

  • 员工信息表(t_staff_info)
  • 员工证书表(t_staff_cert)
  • 文件表(t_edoc)
  • 数据字典表(t_dict_all)

其中文件表和数据字典表为项目公用表,后续将详细介绍。

from django.db import modelsfrom django.utils import timezoneclass TStaffCert(models.Model):    staff = models.ForeignKey('TStaffInfo', on_delete=models.DO_NOTHING,                             blank=True, null=True, db_column='staff_id')    certType = models.IntegerField(db_column='cert_type', blank=True, null=True)    certId = models.IntegerField(db_column='cert_id', blank=True, null=True)    certName = models.CharField(db_column='cert_name', max_length=128, blank=True, null=True)    certGrade = models.IntegerField(db_column='cert_grade', blank=True, null=True)    certMajor = models.IntegerField(db_column='cert_major', blank=True, null=True)    certFulltime = models.IntegerField(db_column='cert_fulltime', blank=True, null=True)    certCode = models.CharField(db_column='cert_code', max_length=128, blank=True, null=True)    certState = models.IntegerField(db_column='cert_state', blank=True, null=True)    certPerson = models.CharField(db_column='cert_person', max_length=50, blank=True, null=True)    certOrg = models.CharField(db_column='cert_org', max_length=50, blank=True, null=True)    certIssuer = models.CharField(db_column='cert_issuer', max_length=50, blank=True, null=True)    certDate = models.DateField(db_column='cert_date', blank=True, null=True)    validDate = models.DateField(db_column='valid_date', blank=True, null=True)    createDate = models.DateTimeField(db_column='create_date', blank=True, null=True,                                       default=timezone.now())    modifyDate = models.DateTimeField(db_column='modify_date', blank=True, null=True,                                     default=timezone.now())    sts = models.IntegerField()    class Meta:        managed = False        db_table = 't_staff_cert'class TStaffInfo(models.Model):    staffCode = models.CharField(db_column='staff_code', help_text='工号', max_length=32,                               blank=True, null=True)    staffName = models.CharField(db_column='staff_name', help_text='姓名', max_length=128,                               blank=True, null=True)    nation = models.CharField(db_column='nation', max_length=64, blank=True, null=True)    bizGroup = models.CharField(db_column='biz_group', max_length=64, blank=True, null=True)    bizDept = models.CharField(db_column='biz_dept', max_length=64, blank=True, null=True)    dept = models.CharField(db_column='dept', max_length=64, blank=True, null=True)    enrollDate = models.DateField(db_column='enroll_date', blank=True, null=True)    graduateDate = models.DateField(db_column='graduate_date', blank=True, null=True)    workingDate = models.DateField(db_column='working_date', blank=True, null=True)    birthday = models.DateField(db_column='birthday', blank=True, null=True)    idCardCode = models.CharField(db_column='id_card_code', max_length=32, blank=True,                               null=True)    gender = models.IntegerField(db_column='gender', blank=True, null=True)    email = models.CharField(db_column='email', max_length=64, blank=True, null=True)    college = models.CharField(db_column='college', max_length=64, blank=True, null=True)    major = models.CharField(db_column='major', max_length=64, blank=True, null=True)    diploma = models.CharField(db_column='diploma', max_length=64, blank=True, null=True)    diplomaCode = models.CharField(db_column='diploma_code', max_length=64, blank=True,                             null=True)    degree = models.CharField(db_column='degree', max_length=64, blank=True, null=True)    degreeCode = models.CharField(db_column='degree_code', max_length=64, blank=True,                             null=True)    majorType = models.CharField(db_column='major_type', max_length=64, blank=True,                             null=True)    contractUntil = models.DateField(db_column='contract_until', blank=True, null=True)    idCardUntil = models.DateField(db_column='id_card_until', blank=True, null=True)    certFulltime = models.IntegerField(db_column='cert_fulltime', blank=True, null=True)    employer = models.CharField(db_column='employer', max_length=64, blank=True, null=True)    mobilePhone = models.CharField(db_column='mobile_phone', max_length=64, blank=True,                              null=True)    jobState = models.IntegerField(db_column='job_state', blank=True, null=True)    insuranceCode = models.CharField(db_column='insurance_code', max_length=64,                                 blank=True, null=True)    insuranceFrom = models.DateField(db_column='insurance_from', blank=True, null=True)    insuranceTo = models.DateField(db_column='insurance_to', blank=True, null=True)    sts = models.IntegerField(db_column='sts', blank=True, null=True)    comment = models.CharField(db_column='comment', max_length=1024, blank=True, null=True)    createDate = models.DateTimeField(db_column='create_date', blank=True, null=True)    modifyDate = models.DateTimeField(db_column='modify_date', blank=True, null=True,                                    default=timezone.now())    class Meta:        managed = False        db_table = 't_staff_info'

数据库配置

Django默认使用 SQLite,但如果需要其他数据库(如 MySQL),需要修改 settings.py 文件中的数据库配置。

# 在 settings.py 中DATABASES = {    'default': {        'ENGINE': 'django.db.backends=mysql',        'NAME': 'edoc_dev',        'USER': 'edoc',        'PASSWORD': 'edoc123',        'HOST': 'xx.xx.xxx.xx',        'PORT': '3306',    }}

路由配置

路由配置可以使用分路由的方式,美化代码结构,避免主路由文件过长。

from django.contrib import adminfrom django.urls import include, pathurlpatterns = [    # 人员信息管理    path('cms/user/', include('staff.urls')),] + admin.site.urls

视图设计

视图应定义在 views.py 中,使用 Django 和 DRF 的功能。

from django.http import JsonResponsefrom rest_framework.decorators import actionfrom rest_framework import viewsetsfrom rest_framework.permissions import IsAuthenticatedfrom staff.models import TStaffInfofrom staff.serializers import StaffSerializerclass StaffViewSet(viewsets.ModelViewSet):    queryset = TStaffInfo.objects.filter(sts=1)    serializer_class = StaffSerializer    def get_permissions(self):        return [IsAuthenticated()]    @action(methods=['GET'], detail=False)    def list(self, request, format=None):        serializer =StaffSerializer(request.data)        return JsonResponse(serializer.data)

关键点解释

  • ForeignKey 表示外键关联到 TStaffInfo 模型。
  • default 参数设置默认值。
  • help_text 添加字段注释。

时间操作

批量修改时间格式,将 Year 转换为空间值或日期格式。

import datetimefrom django.db import connectiondef transform_time(input_t, type):    now = datetime.datetime.now()    if type == 'ts':        return f"{now.year}"    elif type == 'te':        return f"{now.year - int(input_t.split('-')[0])}-12-31"    elif type in ['S', 's']:        timestamp = int(input_t)        return now.strftime("%Y-%m-%d %H:%M:%S") if timestamp else None

通过以上配置和实现,可以快速搭建一个员工信息管理系统,支持 CRUD 操作。

转载地址:http://oblqz.baihongyu.com/

你可能感兴趣的文章
OSError: [Errno 22] Invalid argument: ‘D:\test\x07‘
查看>>
Python的内置函数(十六)、strip()
查看>>
Python字符串操作之字符串分割与组合
查看>>
MATLAB截断数组
查看>>
tf.parse_single_example()
查看>>
tensorflow为什么要用placeholder()
查看>>
latex表示极限
查看>>
tf.tuple
查看>>
C++实现二叉树的最近公共祖先
查看>>
CentOS7安装mysql5.6
查看>>
springboot--01(新建springboot web项目,使用模板thymeleaf返回视图)
查看>>
从git上导入项目到idea,出现某些依赖找不到了
查看>>
windows下通过cmd杀死进程的方法
查看>>
springCould 如何不向注册中心注册并不检索服务
查看>>
开放式系统互联模型(网络的七层架构)
查看>>
干货实战演练-RabbitMQ订阅消息模型
查看>>
web项目各层功能区分(SSH举例)
查看>>
SSM框架常用注解分享
查看>>
windows系统配置自动tomcat
查看>>
HTTP协议三次握手过程
查看>>