Django框架技术总结-学会即可具备Web开发能力(一)

还记得上次用django框架是在半年前了,为了加深记忆、巩固学习,今天和大家分享django框架的技术点,学会即可具备开发Web项目的能力。

为了更好的学习,我专门创建了一个技术交流,有兴趣的可以加WX(19524662948),我拉大家入群,一起探寻程序人生。

目录

一,Django入门

1.1Django环境搭建

 1.2 Django项目创建

1.3 Django各模块创建

1.4 Django中常用命令

1.5 Django项目结构

1.6 Django请求流程

二、URL路由配置

2.1 URL分级

三、数据库连接与ORM模型

3.1数据库连接

3.2 使用ORM模型

3.3 CURD操作 

四、ORM快速应用 

4.1 ORM字段类型

4.2 约束

4.3 FileField和ImageField

5 Django站点管理

5.1 创建超级用户

5.2 admin站点定制

5.2.1注册

5.2.2 自定义表单 

 结束语

一,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如何运用进来、模型类的相关知识等,感兴趣的可以点赞收藏关注,或者加我片头提到的联系方式,一起交流学习、一起成长。

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

戒酒的李白-Lisage

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值