Django快速开发实战
- 能够使用Django Admin快速搭建管理后台
- 掌握Django管理后台的深度定制方法,能够添加定制的功能
- Django中间件的工作原理,能够自己设计实现一个中间件
- 能够使用Django快速为企业现有系统搭建管理后台
- 精益创业的产品思维,结合Django1-2天快速迭代开发出有用的企业应用
初识Django:Django能做什么?
Django适用场景
- 内容管理系统
- 博客
- CMS
- Wiki
- 企业内部系统
- 会议室预定
- 招聘管理
- ERP & CRM
- 报表系统
- 运维管理系统
- CMDB
- 发布管理
- 作业管理
- 脚本管理
- 变更管理
- 故障管理
Django的优点和缺点
优点:
- Python实现,代码干净、整洁
- 提供管理后台,能够快速开发
- 复用度高,设计、使用上遵循DRY原则
- 易于扩展复用的中间件
- 内置的安全框架
- 丰富的第三方类库
缺点:
- 单体应用-不易并行开发,单点扩展
- 不适合非常小的几行代码的项目
- 不适合于高并发的to C互联网项目
Django的设计思想
- DRY(Don`t repeat yourself):不重复造轮子
- MVT
- 快速开发
- 灵活易于扩展
- 松耦合
- 显式优于隐式
用两个命令创建一个包含用户管理功能的后台
使用Django创建一个基础应用
职位管理系统 - 建模
- 职位名称
- 类别
- 工作地点
- 职位职责
- 职位要求
- 发布人
- 发布日期
- 修改日期
安装django
pip install django==5.0
查看django版本
python -m django --version
创建项目
django-admin startproject recruitment
启动服务
python manage.py runserver 0.0.0.0:8000
创建应用
python .\manage.py startapp jobs
jobs表示关于职位管理的应用
生成迁移文件
python .\manage.py makemigrations
迁移数据
python .\manage.py migrate
创建后台管理员账号
python .\manage.py createsuperuser
创建模型
from datetime import datetime
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
JobTypes = [
(0, "技术类"),
(1, "产品类"),
(2, "运营类"),
(3, "设计类"),
]
Cities = [
(0, "北京"),
(0, "上海"),
(0, "深圳"),
(0, "西安"),
]
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_responsibility = models.TextField(max_length=1024, verbose_name="职位职责")
job_requirements = models.TextField(max_length=1024, blank=False, verbose_name="职位要求")
creator = models.ForeignKey(User, verbose_name="创建人", null=True, on_delete=models.SET_NULL)
created_date = models.DateTimeField(verbose_name="创建时间", default=datetime.now)
modified_date = models.DateTimeField(verbose_name="修改时间", default=datetime.now)
注册模型
from django.contrib import admin
from jobs.models import Job
# Register your models here.
admin.site.register(Job)
注册应用
在settings.py INSTALLED_APPS
下注册应用
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'jobs'
]
快速迭代完善应用
设置Django Admin模型显示的字段
class JobAdmin(admin.ModelAdmin):
list_display = ("job_name", "job_type", "job_city", "creator", "created_date", "modified_date")
admin.site.register(JobAdmin)
设置Django Admin新增/修改时不需要手动编辑的字段
class JobAdmin(admin.ModelAdmin):
exclude = ("creator", "created_date", "modified_date")
admin.site.register(JobAdmin)
设置Django Admin创建/修改人为当前登录用户
class JobAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
obj.creator = request.user
super().save_model(request, obj, form, change)
admin.site.register(Job, JobAdmin)
添加自定义页面
职位列表展示
- 列表页时独立页面,使用自定义的页面
- 添加如下页面
- 职位列表页
- 职位详情页
- 匿名用户可以访问
Django的自定义模板
- Django模板包含了输出的HTML页面的静态部分的内容
- 模板里面的动态内容在运行时被替换
- 在views里面指定每个URL使用哪个模板来渲染页面
- 模板继承与块(Template inheritance & Block)
- 模板继承允许定义一个骨架模板,骨架包含站点上的公共元素(如头部导航,尾部链接)
- 骨架模板里面可以定义Block块,每一个Block块都可以在继承的页面上重新定义/覆盖
- 一个页面可以继承自另外一个页面
- 定义一个匿名访问页面的基础页面,基础页面定义页头
- 添加页面 jon/templates/base.html
企业域账号集成
- 什么是目录服务Directory Service?
- 可以直接使用域账号登录
- 不用手工添加账号,维护独立密码
- 可以集成OpenLDAP/ActiveDirectory
- 项目选择OpenLDAP
- DN:目录服务中的一个唯一对象
1、启动OpenLDAP容器:
docker run -p 389:389 -p 636:636 --name ldap-service --detach --hostname ldap-service osixia/openldap
# 检查是否启动成功
docker exec ldap-service ldapsearch -x -H ldap://localhost -b dc=example,dc=org -D "cn=admin,dc=example,dc=org" -w admin
参考文档:https://choubaodxs.github.io/blogs/%E5%9F%BA%E7%A1%80%E8%AE%BE%E6%96%BD/docker%E6%90%AD%E5%BB%BAOpenLDAP.html#%E5%AE%89%E8%A3%85-docker%E6%96%B9%E5%BC%8F
2、启动phpldapadmin容器:
docker run -p 6443:443 --name phpldapadmin-service --hostname phpldapadmin-service --link ldap-service:ldap-host --env PHPLDAPADMIN_LDAP_HOSTS=ldap-host --detach osixia/phpldapadmin
3、浏览器打开https://localhost:6443 默认账号:cn=admin,dc=example,dc=org 默认密码:admin
安装ldap django库
pip install django-python3-ldap