还记得上次用django框架是在半年前了,为了加深记忆、巩固学习,今天和大家分享django框架的技术点,学会即可具备开发Web项目的能力。
为了更好的学习,我专门创建了一个技术交流,有兴趣的可以加WX(19524662948),我拉大家入群,一起探寻程序人生。
目录
一,Django入门
首先要有开发工具pycharm和python环境,没有的可以参考我的pycharm2021.2.1专业版激活_戒酒的李白-Lisage的博客-CSDN博客_pycharm激活码去激活安装。
1.1Django环境搭建
pip install django==2.1.0 -i https://mirrors.aliyun.com/pypi/simple
安装我们的django环境2.1.0,后面-i镜像源会更快
【注意】为了很好的使各依赖之间兼容,所以django2.1.0版本对应python版本为3.5~3.7的版本。如要安装高版本的则可以参考下图安装:
1.2 Django项目创建
进入windows终端,cd到准备创建到哪的目录下,执行:
django-admin startproject xxxDjango
xxx则是你的项目名称
1.3 Django各模块创建
用pycharm打开我们的项目,等待环境导入,在终端输入:
python manage.py start xxxapp
xxx则是你项目中各模块的名称,例如:用户模块等等
1.4 Django中常用命令
django-admin startproject 创建django项目
django-admin startapp 创建django的app模块
python manage.py makemigrations 基于settings中配置的DATABASE数据default方案生成迁移脚本
python manage.py migrate 开始迁移
python manage.py createsuperuser 创建admin站点的超级用户
python manage.py runserver 启动django服务,默认端口是8000, host为127.0.0.1
1.5 Django项目结构
helloDjango
|--- helloDjango 主工程目录
|---- settings.py # 设置文件, 数据库连接、app注册、中间件及模板配置
|---- urls.py # 总路由
|---- wsgi.py # Django实现wsgi的脚本
|---- __init__.py
|--- mainapp 应用模块(主)
|---- __init__.py
|---- admin.py # 后台管理配置脚本
|---- models.py # 数据模型类声明所在脚本
|---- views.py # 声明当前应用的视图处理函数或类
|---- urls.py # 自已增加的当前应用模块的子路由
|---- tests.py # 当前应用模块的单元测试类
|---- apps.py # 声明当前应用的基本信息
|--- manage.py WEB应用的启动脚本, 项目工程的入口
1.6 Django请求流程
所有后端项目的请求流程都是雷同的,只是用到的组件不一样
1. 到urls分发器 (总urls.py -> 子路由)
2. urls分发器根据路由规则(正则)分发到views
3. views去调用Model,交互数据
4. views将数据渲染到模板中
5. 模板呈现给用户
二、URL路由配置
2.1 URL分级
url分为主路由和子路由,主路由放在我们的主项目下,子路由放在我们各个模块。主路由include子路即可连接子路由里对应的views函数。
主路由:
urlpatterns = [
path('url', 视图函数, name=None),
path('user/', include('userapp.urls', namespace=None)) # 包含子路由
]
子路由:
urlpatterns = [
path('login/', views.login),
]
这种配置是Django2.1.0的配置方法,主要是通过path函数进行配置。还有最新的配置路由方法re_path,那就是通过正则表达式配置,因为当我们发送网络请求之后,http协议会DNS解析我们的IP地址,从而找到对应的路由。
re_path(r'^search/(?P<phone>1[3-57-9][\d]{9})$', views.search)
三、数据库连接与ORM模型
Django是一个MTV模型,其中的M即为model,也可以理解成我们的表,产生的数据交互都在model里面。
3.1数据库连接
django默认的数据库时sqlite3,大家会发现使用迁移命令的时候会自动生成sqlite3.db,即为我们的本地数据库。当我们在使用ORM模型之前,需要先生成迁移文件,再执行迁移文件。目的是将我们的model转化成表放入数据库中。
生成迁移文件:
python manage.py makemigrations
执行迁移文件:
python manage.py migrate
3.2 使用ORM模型
在各模块下都有一个models.py的文件,在此文件里写入model模型。
from django.db import models
class User(models.Model):
# 默认情况下会自动创建id主键
phone = models.CharField(max_length=11)
pwd = models.CharField(max_length=6)
name = models.CharField(max_length=20)
class Meta:
# 指定当前模型类映射成哪一个表
db_table = 'app_user'
这样就可以生成迁移文件,执行迁移文件了。
3.3 CURD操作
拿到表模型之后,我们无非就是对其进行增删改查,CURD对应的则为create,update,read,delete操作。
我们先来看Create,当我们获取user模型的实例之后,ORM模型则会自动管理好sql语句,我们只需要save即可添加数据。
u = User()
u.phone = '19524662948'
u.pwd = '123456'
u.name = 'jiujiang'
# 保存模型对象
u.save()
其次是Update,有过一定经验的程序员应该都知道。修改有两种方式,一种是查找到之后删除再新增,一种是查找到之后直接修改。同理,save即可保存查找到的数据,也就变成了更新。
u = User.objects.get(1)
u.name = 'lijiujiang'
u.save()
而后是我们的Read查看,不难发现上面已经用到了
User.objects.all() # 查询所有, list
User.objects.get(pk=1) # 根据主键值查询一个实体对象
最后是我们的Delete,同样delete方法执行的sql语句已经被ORM模型管理好了,我们找到想要删除的数据,直接delete就好。
u = User.objects.get(1)
u.delete() # 删除
四、ORM快速应用
刚才应用ORM知识冰山一角,小试牛刀,下面我们全面对ORM做一个详细的介绍。ORM(Object Relational Mapping)用于实现面向对象编程语言里不同类型系统的数据之间的转换 。从效果上说,它其实是创建了一个可在编程语言里使用的--"虚拟对象数据库"。
4.1 ORM字段类型
CharField:字符类型,必须指定max_length属性
IntegerField:数值类型,可以指定chiose为元组,表示选择范围
BooleanField:布尔类型, 数据表中表现是0 或 1
NullBooleanField:可以为空的布尔值
AutoField:自增列 int类型。必须填入参数 primary_key=True;可选auto_create自增
FloatField:浮点类型
DecimalField:同Python的Decimal类型,参数有
- max_digits 最大总位数
- decimal_places 小数点后的位数
TextField:文本类型
UUIDField:字符串类型,Django Admin以及ModelForm中提供对UUID格式的验证
对以上字段类型那几个出来简单举例:
class Order(models.Model):
no = models.UUIDField(verbose_name='订单编号')
price = models.DecimalField(verbose_name='订单金额',max_digits=6, decimal_places=2)
pay_state = models.BooleanField(default=False)
FileField:字符串,路径保存在数据库,文件上传到指定目录,参数内容如下:
upload_to = "" 上传文件的保存路径
storage = None 存储组件,默认django.core.files.storage.FileSystemStorage
ImageField:字符串,路径保存在数据库,文件上传到指定目录,参数内容如下:
upload_to = "" 上传文件的保存路径
storage = None 存储组件,默认django.core.files.storage.FileSystemStorage
width_field=None, 上传图片的高度保存的数据库字段名(字符串)
height_field=None 上传图片的宽度保存的数据库字段名(字符串)
DateField:日期类型 格式:YYYY-MM-DD 参数有:
auto_now 每次保存时,自动设置当前字段为当前时间,用于“最后一次修改时间”
auto_now_add 对象每一次保存时,自动设置为当前时间用于“创建时间”
DateTimeField :日期时间类型 datetime.datetime 日期+时间格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]
TimeField:时间类型 格式: HH:MM[:ss[.uuuuuu]]
4.2 约束
max_length 最大长度
default 默认值
unique 唯一
primary_key 主键
null False, 不能为null(默认) True , 可以为null
blank 是否允许用户输入为空,即空字符串
db_index 索引
db_column 指定字段名
verbose_name 在admin显示的字段名称
choices 一个包含双元素元组的可迭代的对象,用于给字段提供选项
4.3 FileField和ImageField
文件字段和图片字段都属性MEDIA的多媒体类型的文件,需要在settings.py设置脚本文件中指定MEDIA_ROOT、MEDIA_URL、STATIC_URL, STATICFILES_DIRS
使用ImageField时,必须安装Pillow库
pip install pillow
5 Django站点管理
5.1 创建超级用户
python manager.py createsuperuser
根据提示输入账号、密码、邮箱即可
5.2 admin站点定制
5.2.1注册
规定在各个模块中的admin.py文件
admin.site.register(user)
5.2.2 自定义表单
前提是在admin.py文件中定义admin.ModelAdmin的子类
在User的表单中添加所有字段
class UserAdmin(admin.ModelAdmin):
fields = ('phone','pwd','name',)
admin.site.register(User, UserAdmin)
分栏显示
class UserAdmin(admin.ModelAdmin):
fieldsets = (['Main', {'fields': ('phone',)}])
内联显示
# 为外表创建内联类
class FruitInline(admin.TabularInline):
model = Fruit
# 在主表设置内联
class StoreAdmin(admin.ModelAdmin):
inlines = [FruitInline]
列表显示搜索
# 在admin.ModelAdmin的子类中
class UserAdmin(admin.ModelAdmin):
list_display = ('id', 'phone','name') # 列表显示
search_fields = ('name','phone') # 搜索关键字的字段
admin.site.register(user, UserAdmin)
效果如下:
结束语
后面还有几个章节,包括CURD的深度解析、F和Q的方法、原声SQL如何运用进来、模型类的相关知识等,感兴趣的可以点赞收藏关注,或者加我片头提到的联系方式,一起交流学习、一起成长。