30.遗留系统集成:为已有数据库生成管理后台

162 阅读2分钟

问题

  • 已经有内部系统在运行 缺少管理功能,希望能有一个权利后台。

比如 人事系统,CRM,ERP 的产品,缺少部分数据的维护功能

诉求

  • 3分钟生成一个管理后台;
  • 可以灵活定制页面;
  • 不影响正在运行的业务系统

为已有数据库生成管理后台

思路

  • 创建项目: django-admin startproject empmanage
  • 编辑 settings.py 中的数据库配置, vim ~/settings.py
  • 创建应用 python3 manage.py startapp candidates
  • 注册应用 candidates 修改settings添加APP
  • 生成 model 类: ./manage.py inspectdb > models.py
  • 注册 model 类
  • 不要同步数据库 直接启动服务

empmanage/settings.py

ALLOWED_HOSTS = ['172.31.7.188', '172.31.7.188:8000']


DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'dj',
        'USER': 'root',
        'PASSWORD': 'rootroot',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'charset': 'utf8mb4',
    }
}
python3 manage.py inspectdb > candidates/models.py 

image.png

vim empmanage/candidates/models.py 只保留需要暴露的表

from django.db import models

from django.contrib.auth.models import User as AuthUser

class Candidate(models.Model):
    userid = models.IntegerField(primary_key=True)
    username = models.CharField(max_length=135)
    city = models.CharField(max_length=135)
    phone = models.CharField(max_length=135)
    email = models.CharField(max_length=135)
    apply_position = models.CharField(max_length=135)
    born_address = models.CharField(max_length=135)
    gender = models.CharField(max_length=135)
    candidate_remark = models.CharField(max_length=135)
    bachelor_school = models.CharField(max_length=135)
    master_school = models.CharField(max_length=135)
    doctor_school = models.CharField(max_length=135)
    major = models.CharField(max_length=135)
    degree = models.CharField(max_length=135)
    test_score_of_general_ability = models.DecimalField(max_digits=3, decimal_places=1, blank=True, null=True)
    paper_score = models.DecimalField(max_digits=3, decimal_places=1, blank=True, null=True)
    first_score = models.DecimalField(max_digits=2, decimal_places=1, blank=True, null=True)
    first_learning_ability = models.DecimalField(max_digits=2, decimal_places=1, blank=True, null=True)
    first_professional_competency = models.DecimalField(max_digits=2, decimal_places=1, blank=True, null=True)
    first_advantage = models.TextField()
    first_disadvantage = models.TextField()
    first_result = models.CharField(max_length=256)
    first_recommend_position = models.CharField(max_length=256)
    first_interviewer_user = models.ForeignKey(AuthUser, models.DO_NOTHING, blank=True, null=True)
    first_remark = models.CharField(max_length=135)
    second_score = models.DecimalField(max_digits=2, decimal_places=1, blank=True, null=True)
    second_learning_ability = models.DecimalField(max_digits=2, decimal_places=1, blank=True, null=True)
    second_professional_competency = models.DecimalField(max_digits=2, decimal_places=1, blank=True, null=True)
    second_pursue_of_excellence = models.DecimalField(max_digits=2, decimal_places=1, blank=True, null=True)
    second_communication_ability = models.DecimalField(max_digits=2, decimal_places=1, blank=True, null=True)
    second_pressure_score = models.DecimalField(max_digits=2, decimal_places=1, blank=True, null=True)
    second_advantage = models.TextField()
    second_disadvantage = models.TextField()
    second_result = models.CharField(max_length=256)
    second_recommend_position = models.CharField(max_length=256)
    second_interviewer_user = models.ForeignKey(AuthUser, models.DO_NOTHING, blank=True, null=True)
    second_remark = models.CharField(max_length=135)
    hr_score = models.CharField(max_length=10)
    hr_responsibility = models.CharField(max_length=10)
    hr_communication_ability = models.CharField(max_length=10)
    hr_logic_ability = models.CharField(max_length=10)
    hr_potential = models.CharField(max_length=10)
    hr_stability = models.CharField(max_length=10)
    hr_advantage = models.TextField()
    hr_disadvantage = models.TextField()
    hr_result = models.CharField(max_length=256)
    hr_interviewer_user = models.ForeignKey(AuthUser, models.DO_NOTHING, blank=True, null=True)
    hr_remark = models.CharField(max_length=256)
    creator = models.CharField(max_length=256)
    created_date = models.DateTimeField()
    modified_date = models.DateTimeField(blank=True, null=True)
    last_editor = models.CharField(max_length=256)

    class Meta:
        managed = False
        db_table = 'candidate'

class JobsJob(models.Model):
    job_type = models.SmallIntegerField()
    job_name = models.TextField()
    job_city = models.SmallIntegerField()
    job_responsibility = models.TextField()
    job_requirement = models.TextField()
    creator = models.ForeignKey(AuthUser, models.DO_NOTHING, blank=True, null=True)
    created_date = models.DateTimeField()
    modified_date = models.DateTimeField()

    class Meta:
        managed = False
        db_table = 'jobs_job'

managed = False 防止反向修改数据库

注册到admin中

empmanage/candidates/admin.py

from django.contrib import admin

# Register your models here.


from .models import JobsJob, Candidate


admin.site.register(JobsJob)
admin.site.register(Candidate)