Django

内容参考:https://time.geekbang.org/course/intro/100061901

Django适用于那些场景

  • 内容管理系统
    • 博客
    • CMS
    • WiKi
  • 企业内部系统
    • 会议室预订
    • 招聘管理
    • ERP & CRM
    • 报表系统
  • 运维管理系统
    • CMDB
    • 发布管理
    • 作业管理
    • 脚本管理
    • 变更管理
    • 故障管理

优点和缺点

  • 优点
    • Python 实现,代码干净、整洁
    • 提供管理后台,能够快速开发
    • 复用度高,设计、使用上遵循DRY原则
    • 易于扩展复用的中间件
    • 内置的安全框架
    • 丰富的第三方库
  • 缺点
    • 单个应用-不易并行开发,单点扩展
    • 不适合非常小的几行代码的项目
    • 不适合于高并发的to C 互联网项目

Django的MTV架构

在这里插入图片描述

Django的设计思想

  • DRY(Don’t repeat yourself):不重复造轮子
  • MVT
  • 快速开发
  • 灵活易扩展
  • 松耦合
  • 显式优于隐式

Django开发环境

python(Anaconda安装,python安装包安装)
开发工具(PyCharm,社区版不支持Django开发,需要安装Django包,安装完后Django的代码会有自动的提示)
Django(conda install djangopip3 install django

第一个项目

###创建会议室管理项目

django-admin startproject meetingroom

cd meetingroom

启动项目

python manage.py runserver 0.0.0.0:8000

0.0.0.0 表示监听本机的所有IP地址

访问项目

http://127.0.0.1

访问管理页面

127.0.0.1/admin
如果访问页面出错,有可能是因为还没有初始化整个数据库,所以没法访问;
可以使用python manage.py migrate创建不同表跟表字段】
重启服务
进图管理页面,如下,需要账号和密码,可以通过admin命令创建一个管理员
在这里插入图片描述

python manage.py createsuperuser

在这里插入图片描述
输入账号名、邮箱地址、密码,如果密码过于简单会提示在这里插入图片描述
直接跳过即可;
输入账号密码,可以进入管理页面:
在这里插入图片描述

配置文件(settings.py)

  • DEBUG:默认为True,测试环境下,debug可以看到出错的各种信息,包括异常的信息;生产环境下应该把debug设置为False,否则,用户可以看到各种调试信息,这是很危险的;
  • ALLOWED_HOSTS:配置哪些IP地址可以访问应用,默认只有127.0.0.1的端口可以访问,通常情况下并不会在这个配置里面把外网的ip的地址配上来而是用一个网关服务,比如用Nginx、Tengine来做这个网关;
  • INSTALLED_APPS:Django项目里面安装的应用,默认安装django.admin、auth、sessions、messages和静态资源文件的应用;
    我们创建应用完了之后也要往往APPS配置里面的结尾加上我们的应用;
  • MIDDLEWARE: 启动中间件;
  • TEMPLATES:配置了使用了哪个模板引擎,默认使用DjangoTemplates,模板引擎里面也配置了那上下文处理器;
  • DATABASES:配置了使用哪个数据库,默认使用本地的sqllite的数据库;
  • LANGUAGE_CODE:配置项目语言,默认是英文‘en-us’,中文为‘zh-hans’

职位管理系统

需要的字段

  • 职位名称
  • 类别
  • 工作地点
  • 职位职责
  • 职位要求
  • 发布人
  • 发布日期
  • 修改日期

创建一个新的应用

python manage.py startapp jobs

目录中会增加一个jobs应用的文件夹在这里插入图片描述
将应用添加到INSTALLEDA_APPS结尾
在这里插入图片描述

在models中定义职位的模型

from django.db import models
from django.contrib.auth.models import User

# Create your models here.

JobTypes = [
    (0, "技术类"),
    (1, "产品类"),
    (2, "运营类"),
    (3, "设计类")
]
Cities = [
    (0, "北京"),
    (1, "上海"),
    (2, "深圳")
]


class Job(models.Model):
    job_type = models.SmallIntegerField(blank=False, choices=JobTypes, verbose_name="职位类别")
    job_name = models.CharField(max_length=250, blank=False, verbose_name="职位名称")
    job_city = models.SmallIntegerField(choices=Cities, blank=False, verbose_name="工作地点")
    job_reponsibility = models.TextField(max_length=1024, verbose_name="职位职责")
    job_requirement = models.TextField(max_length=1024, blank=False, verbose_name="职位要求")
    creator = models.ForeignKey(User, verbose_name="创建人", null=True, on_delete=models.SET_NULL) # creator为User的外键引用,指定在数据被删除是把值设置成NULL
    created_date = models.DateTimeField(verbose_name="创建日期")
    modified_date = models.DateTimeField(verbose_name="修改时间")

启动服务

python manage.py runserver 0.0.0.0:8000

如果没有报错,可以去页面查看
这时可以发现,页面还是只能管理用户和群组,并不能管理Model
在这里插入图片描述

将Model注册到管理后台

出现上面的情况是因为我们还没将Model注册到管理后台,需要将Model注册到admin里面;
admin.py

from django.contrib import admin
from jobs.models import Job


admin.site.register(Job)

这时再刷新页面JOBS就出来。
在这里插入图片描述
但是点击jobs进去因为没有创建jobs的表,也就是数据库的表还没有同步,所以页面还是出错的;

数据同步

makemigrations 它会创建数据库脚本:

python manage.py makemigrations
Migrations for 'jobs':
  jobs\migrations\0001_initial.py
    - Create model Job

让数据库的改动生效:

python manage.py migrate

再重新启动服务,无出错回到页面
这是的页面为:
在这里插入图片描述

增加职位

在这里插入图片描述
填写相关信息并保存,页面会显示如下:
在这里插入图片描述

设置默认值

使用default 设置默认值;

created_date = models.DateTimeField(verbose_name="创建日期",default=datetime.now) # default 设置默认值,引用datetime函数,所以now后面不需要加()
modified_date = models.DateTimeField(verbose_name="修改时间",default=datetime.now)

列表页展示字段

在admin.py中定制管理属性,注册job模型时,可以传入第二个参数

class JobAdmin(admin.ModelAdmin):
    list_display = ('job_name','job_type','job_city','creator','created_date','modified_date') # 展示页展示相关信息

admin.site.register(Job,JobAdmin)

在这里插入图片描述

设置默认创建人,隐藏相关字段

使用exclude隐藏相关的字段;

class JobAdmin(admin.ModelAdmin):
        list_display = ('job_name','job_type','job_city','creator','created_date','modified_date') # 展示页展示相关信息
        exclude = ('creator','created_date','modified_date')


admin.site.register(Job,JobAdmin)

在这里插入图片描述
这样子创建人、创建时间、修改时间在修改页中就被隐藏了,系统会自动生成;
如果直接提交的话,系统内是没有这些属性的,所以我们可以利用JobAdmin中的ModelAdmin的一个save_model,这个方法可以在我们保存一个模型之前去做一些操作;

obj.creator = request.user是将当前登录账号设置成创建人

class JobAdmin(admin.ModelAdmin):
    exclude = ('creator','created_date','modified_date')
    list_display = ('job_name','job_type','job_city','creator','created_date','modified_date') # 展示页展示相关信息

    def save_model(self, request, obj, form, change):
        obj.creator = request.user # 将创建人设置成当前用户
        super().save_model(request,obj,form,change)


admin.site.register(Job,JobAdmin)

内容参考:https://time.geekbang.org/course/intro/100061901

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值