博客
关于我
基于Django框架实现前后端分离(二)
阅读量:671 次
发布时间: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/

你可能感兴趣的文章
MySQL处理千万级数据分页查询的优化方案
查看>>
mysql备份
查看>>
mysql备份与恢复
查看>>
mysql备份工具xtrabackup
查看>>
mysql备份恢复出错_尝试备份/恢复mysql数据库时出错
查看>>
mysql复制内容到一张新表
查看>>
mysql复制表结构和数据
查看>>
mysql复杂查询,优质题目
查看>>
MySQL外键约束
查看>>
MySQL多表关联on和where速度对比实测谁更快
查看>>
MySQL多表左右连接查询
查看>>
mysql大批量删除(修改)The total number of locks exceeds the lock table size 错误的解决办法
查看>>
mysql如何做到存在就更新不存就插入_MySQL 索引及优化实战(二)
查看>>
mysql如何删除数据表,被关联的数据表如何删除呢
查看>>
MySQL如何实现ACID ?
查看>>
mysql如何记录数据库响应时间
查看>>
MySQL子查询
查看>>
Mysql字段、索引操作
查看>>
mysql字段的细节(查询自定义的字段[意义-行列转置];UNION ALL;case-when)
查看>>
mysql字段类型不一致导致的索引失效
查看>>