前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从0开始做系统

从0开始做系统

作者头像
赵云龙龙
发布2019-07-11 10:23:38
1.4K0
发布2019-07-11 10:23:38
举报
文章被收录于专栏:python爱好部落

前面已经写了如何做接口,那是方便调用的。现在写个如何做后台系统,是方便操作的。

Django自带的后台管理是Django明显特色之一,可以让我们快速便捷管理数据。后台管理可以在各个app的admin.py文件中进行控制。

假如有个小白,想做个后台系统,如何做,他可以直接用Django的admin来弄。 先安装django,创建项目和app

代码语言:javascript
复制
pip install django
django-admin startproject xxx
cd xxx
python manage.py startapp yyy

项目和app建好后,到项目的settings.py里面,把新增的app加上

代码语言:javascript
复制
INSTALLED_APPS = [
        ...
        'bb',
        'rest_framework'
    ]

安装好mysql后,

代码语言:javascript
复制
    mysql -u root -p
    show databases;

为Django项目创建数据库

代码语言:javascript
复制
    create database rouboinfo default charset utf8 collate utf8_general_ci;

在项目的settings.py中,将默认的改成:

代码语言:javascript
复制
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'rouboinfo',
            'USER': 'root',
            'PASSWORD': 'root',
            'HOST': '127.0.0.1',
            'PORT': '3306',
        }

初始化数据库

代码语言:javascript
复制
    python manage.py makemigrations
    python manage.py migrate

我们根据自己的需求,定义的表

在app中的models中定义好字段。

代码语言:javascript
复制
from django.db import models

# Create your models here.
class employeelist(models.Model):
    id = models.CharField('编号', primary_key=True,max_length=100)
    name = models.CharField('姓名', max_length=100)
    sex = models.CharField(verbose_name='性别', max_length=5, choices=(('male', '男'), ('female', '女')), default='male')
    car_id = models.CharField('身份证号', max_length=100)
    province = models.CharField('籍贯', max_length=50)
    department = models.CharField('部门', max_length=50)
    position = models.CharField('职位', max_length=50)
    employee_in_time = models.DateTimeField('入职时间',max_length=100)
    leader_name = models.CharField('直属领导', max_length=50)

    class Meta:
        verbose_name_plural = verbose_name = "员工信息"  # 该模型在后台显示的名称

    def __str__(self):
        return self.name

其中字段类型可以参考:

代码语言:javascript
复制
1、AutoField   ---自增列 = int(11)    如果没有的话,默认会生成一个名称为 id 的列,如果要显示的自定义一个自增列,必须将给列设置为主键 primary_key=True。
2、CharField   ---字符串字段  单行输入,用于较短的字符串,如要保存大量文本, 使用 TextField。必须 max_length 参数,django会根据这个参数在数据库层和校验层限制该字段所允许的最大字符数。
3、BooleanField   ---布尔类型=tinyint(1)   不能为空,Blank=True
4、ComaSeparatedIntegerField   ---用逗号分割的数字=varchar   继承CharField,所以必须 max_lenght 参数,
5、DateField   ---日期类型 date   对于参数,auto_now = True 则每次更新都会更新这个时间;auto_now_add 则只是第一次创建添加,之后的更新不再改变。
6、DateTimeField   ---日期类型 datetime   同DateField的参数
7、Decimal   ---十进制小数类型 = decimal   必须指定整数位max_digits和小数位decimal_places
8、EmailField   ---字符串类型(正则表达式邮箱) =varchar   对字符串进行正则表达式   一个带有检查 Email 合法性的 CharField,不接受 maxlength 参数。
9、FloatField   ---浮点类型 = double   浮点型字段。必须提供两个 参数, 参数描述:
max_digits:总位数(不包括小数点和符号)
decimal_places:小数位数。如:要保存最大值为 999 (小数点后保存2位),你要这样定义字段:FloatField(…,max_digits=5, decimal_places=2),要保存最大值一百万(小数点后保存10位)的话,你要这样定义:FloatField(…,max_digits=19, decimal_places=10)
10、IntegerField   ---整形   用于保存一个整数
11、BigIntegerField   ---长整形

做完这个以后,需要migrate一下,然后数据库里就可以查到数据表了。

简单配置一下admin, 在app下面的admin里面, 先定义一个类,然后注册到admin里面。

代码语言:javascript
复制
@admin.register(employeelist)
class EmployeeAdmin(admin.ModelAdmin):
    pass

然后建一个管理员账号

代码语言:javascript
复制
python manage.py createsuperuser

将项目启动起来:

代码语言:javascript
复制
python manage.py runserver

浏览器中打开 : http://localhost:8000/admin 就可以看到

登陆进去,见到的页面是这样子的。

新插入一条数据:

回到页面啥也没显示,赶紧加个显示列表:

代码语言:javascript
复制
    list_display = ('id','name','sex','province','department','position','employee_in_time','leader_name')

现在还有一个问题,就是没有汉化。 admin界面汉化 默认admin后台管理界面是英文的,对英语盲来说用起来不方便。可以在settings.py中设置,

代码语言:javascript
复制
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
DATETIME_FORMAT = 'Y年m月d日 H:i:s'
DATE_FORMAT = 'Y年m月d日'

还可以更改项目的显示名称:

代码语言:javascript
复制
admin.site.site_header = '旗杨后台管理系统'
admin.site.site_title = '旗杨后台管理系统'
admin.site.index_title = '员工管理'
admin.site.site_url = ''

在models里面定义:

代码语言:javascript
复制
    class Meta:
        verbose_name_plural = verbose_name = "员工信息"  # 该模型在后台显示的名称

Django后台APP名字改为中文

代码语言:javascript
复制
# yourapp/apps.py
from django.apps import AppConfig
class YourAppConfig(AppConfig):
    name = 'yourapp'
    verbose_name = 'xx系统'

然后修改yourapp/init.py,设置default_app_config为YourAppConfig

代码语言:javascript
复制
# yourapp/__init__.py
default_app_config = 'yourapp.apps.YourAppConfig'

现在看起来就是这样的

我们可以对后台实现更多的定制化,这个很方便。 ModelAdmin中提供了大量的可定制功能,如: 1.list_display,列表时,定制显示的列

代码语言:javascript
复制
 list_display = ('id','name','sex','province','department','position','employee_in_time','leader_name')
#list_per_page设置每页显示多少条记录,默认是100条
    list_per_page = 50
    
    #ordering设置默认排序字段,负号表示降序排序
    ordering = ('-publish_time',)
代码语言:javascript
复制
list_filter,列表时,定制右侧快速筛选。
list_filter = ["publish","authors"]

ModelAdmin中提供了大量的可定制功能,如

  1. list_display,列表时,定制显示的列。
  2. list_display_links,列表时,定制列可以点击跳转。
  3. list_filter,列表时,定制右侧快速筛选。
  4. list_select_related,列表时,连表查询是否自动select_related
  5. list_editable,列表时,可以编辑的列
  6. search_fields,列表时,模糊搜索的功能
  7. date_hierarchy,列表时,对Date和DateTime类型进行搜索
  8. inlines,详细页面,如果有其他表和当前表做FK,那么详细页面可以进行动态增加和删除
  9. action,列表时,定制action中的操作
  10. 定制HTML模板
  11. raw_id_fields,详细页面,针对FK和M2M字段变成以Input框形式
  12. fields,详细页面时,显示字段的字段
  13. exclude,详细页面时,排除的字段
  14. readonly_fields,详细页面时,只读字段
  15. fieldsets,详细页面时,使用fieldsets标签对数据进行分割显示
  16. 详细页面时,M2M显示时,数据移动选择(方向:上下和左右)
  17. ordering,列表时,数据排序规则
  18. radio_fields,详细页面时,使用radio显示选项(FK默认使用select)
  19. form = ModelForm,用于定制用户请求时候表单验证 可以参考: django admin高级扩展 简单的定制了一下:
代码语言:javascript
复制
from django.contrib import admin

# Register your models here.

from .models import employeelist


LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
DATETIME_FORMAT = 'Y年m月d日 H:i:s'
DATE_FORMAT = 'Y年m月d日'

admin.site.site_header = '旗杨后台管理系统'
admin.site.site_title = '旗杨后台管理系统'
admin.site.index_title = '员工管理'
admin.site.site_url = ''

@admin.register(employeelist)
class EmployeeAdmin(admin.ModelAdmin):
    list_display = ['id','name','sex','province','department','position','employee_in_time','leader_name']
    # list_per_page设置每页显示多少条记录,默认是100条
    list_per_page = 50
    # ordering设置默认排序字段,负号表示降序排序
    ordering = ('-employee_in_time',)
    list_display_links = ['id','leader_name']
    list_filter = ["name", "department","leader_name"]
    #列表时,可以编辑的列
    list_editable = ['department']

    #search_fields,列表时,模糊搜索的功能
    search_fields = ('name', 'department')
    date_hierarchy = 'employee_in_time'  # 详细时间分层筛选 
    #fields = ('name',)
    readonly_fields = ('province',)

显示成这个样子的

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-06-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python爱好部落 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档