Python之Django框架(一)
Django project
前言:
官方文档:https://docs.djangoproject.com/zh-hans/3.0/
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rJEmtwWz-1654440845479)(Typora_image/001.png)]](https://i-blog.csdnimg.cn/blog_migrate/9eff7bb15b630dd032e59bbfcdadb80b.png)
注意:Python Web的基础服务架构有两大分支,WSGI和ASGI。目前来看,所以的Web架构都支持WSGI,对于Django而言,2.x版本没有ASGI, 3.X有ASGI.(网关接口是用于Web应用与Web服务器进行通讯。其中WSGI、ASGI是专为python设计的网关接口。uwsgi是uWSGI服务器自有的传输协议 .)
拓展:
Web服务器网关接口(Python Web Server Gateway Interface),缩写为WSGI,它是一种专为python定义的接口规范,用于web服务端和web应用(框架)之间的连接通俗的理解,WSGI也是一种规范协议,
异步网关接口(Asynchronous Server Gateway Interface),是WSGI的扩展版本,旨在为Python Web服务、框架和应用之间提供一个标准的异步接口。其本身可以提供同步和异步应用,并且可以并行处理。还能处理多种通用协议,包括HTTP,HTTP2和WebSocket。
1.创建空白项目
![![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vhx5pNKC-1654440845481)(Typora_image/002.png)]]](https://i-blog.csdnimg.cn/blog_migrate/4ddfb0f0c048b9f66d93b98c10e5bb7f.png)
点击“Create"
[外链图![片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wdbVVz9q-1654440845483)(Typora_image/003.png)]](https://i-blog.csdnimg.cn/blog_migrate/f306096206e5670bda99d7b9186f1120.png)
拓展:
激活Django环境
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xKhgIiH4-1654440845484)(Typora_image/004.png)]](https://i-blog.csdnimg.cn/blog_migrate/e5500b749efc8ad8afea22e33c26d68c.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RbSddBPD-1654440845486)(Typora_image/005.png)]](https://i-blog.csdnimg.cn/blog_migrate/e89e9adb213dc1f888b659b5cc4de719.png)
2.安装django包
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fp0cMpMM-1654440845487)(Typora_image/006.png)]](https://i-blog.csdnimg.cn/blog_migrate/3c05926cd5668edaf07dedee5351e796.png)
[拓展]:在django的交互环境里查看版本
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nDXCUFH2-1654440845488)(Typora_image/007.png)]](https://i-blog.csdnimg.cn/blog_migrate/004c5016ba6d3ba11862c9e835625761.png)
在python.console里面也可以验证
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sg3czUR0-1654440845489)(Typora_image/008.png)]](https://i-blog.csdnimg.cn/blog_migrate/f63ee0a50f81cd08d7e54f72bbd2e541.png)
2.1 django-admin命令
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5QR4mP7O-1654440845490)(Typora_image/009.png)]](https://i-blog.csdnimg.cn/blog_migrate/86eb375d42eb11ae7850b7035ce09374.png)
3.创建应用
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fnVXMIAN-1654440845492)(Typora_image/010.png)]](https://i-blog.csdnimg.cn/blog_migrate/cddb19bd7fe4916ddae5e6435a85ba2a.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ypAECutc-1654440845493)(Typora_image/013.png)]](https://i-blog.csdnimg.cn/blog_migrate/286357d222a66cc8c24cb752728ec030.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LQTF44Bg-1654440845494)(Typora_image/011.png)]](https://i-blog.csdnimg.cn/blog_migrate/f97b168eb3658fa5e6f18acd7e578239.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J7aj0PxF-1654440845496)(Typora_image/012.png)]](https://i-blog.csdnimg.cn/blog_migrate/bb7e55fb497a47e61a14178fba75c05e.png)
manage.py:一个让你用各种方式管理Django项目的命令行工具
# 原始建法
django-admin startapp
# 当用manage.py脚本后
python manage.py startapp
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vdD9HpEJ-1654440845497)(Typora_image/014.png)]](https://i-blog.csdnimg.cn/blog_migrate/2eb58f28be140f069fc4e71b42a6baf7.png)
4.启动项目
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GkHnLzJK-1654440845499)(Typora_image/015.png)]](https://i-blog.csdnimg.cn/blog_migrate/530e57b8a2d9486b4cda892d05d4b30c.png)
还可以自定义端口
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OUVaWm3K-1654440845502)(Typora_image/016.png)]](https://i-blog.csdnimg.cn/blog_migrate/709f1abf99cfda9d449c403537a4a499.png)
也可以指定IP的绑定的host:
python manage.py runserver 0:9000
0:表示0.0.0.0,绑定当前host主机的实际IP地址
在浏览器中,如果要访问本地的IP地址,可以访问:
- http://localhost:9000
- http://127.0.0.1:9000
- http://(通过终端查询到的ip地址):9000
[注意]
修改主工程目录下的settings.py文件
ALLOWED_HOSTS = ['*'] # 白名单
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6AFlxPy6-1654440845504)(Typora_image/017.png)]](https://i-blog.csdnimg.cn/blog_migrate/a40d1ca318aaa682321c6d294f952cf8.png)
4.创建登录应用
python manage.py startapp login
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IMMuIOro-1654440845506)(Typora_image/018.png)]](https://i-blog.csdnimg.cn/blog_migrate/ef27804b52bda234155cb0729e0030c9.png)
| 应用目录结构: |
|---|
| - migrations 包含所有生成当前应用的数据模型迁移文件脚本 |
| - apps.py 应用的配置信息 |
| - admin.py 配置站点下的应用信息 |
| - models.py 应用的所有模型类声明所在的脚本 |
| - tests.py 应用测试的脚本 |
| - views.py 应用的所有Web接口 |
- Django采用 MVC设计思想,设计出自己的MTV,字母一一对应。m对m,v对t,c对v
- 在views中,角色是Controller控制器,通过Models将数据加载出来,再通过T(emplate)模板将数据渲染出来,最后将渲染后的HTML封装成Response响应对象返回给Django框架
- models数据模型,采用了ORM框架,实现数据的CURD操作。同时支持模型之间的外键关联操作
- template 将数据渲染出来
5.应用
5.1 创建Web接口
在login应用中的views.py里,写如下代码
from django.http import HttpResponse
from django.shortcuts import render
# Create your views here.
def index(request):
return HttpResponse('hello world')
在主工程的主路由里面,添加如下代码,并启动
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r6cA0Cxp-1654440845506)(Typora_image/019.png)]](https://i-blog.csdnimg.cn/blog_migrate/eb45fc86eb361791406702cbe29d9002.png)
效果展示:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7Hk81Wga-1654440845513)(Typora_image/020.png)]](https://i-blog.csdnimg.cn/blog_migrate/d04a8d05ce1adcd33105b02ff82c0b16.png)
还可以创建子路由来访问Web
- 使用子路由时,将子路由添加到主路由里
主路由修改:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vfwZ7P5E-1654440845518)(Typora_image/021.png)]](https://i-blog.csdnimg.cn/blog_migrate/b97953043a68ae31af005801d3075564.png)
子路由修改
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uJ1QaXiA-1654440845520)(Typora_image/022.png)]](https://i-blog.csdnimg.cn/blog_migrate/e5267b9f35009491c3c0f8ca3dfe6452.png)
login里views里的接口修改:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6PncXWP5-1654440845523)(Typora_image/023.png)]](https://i-blog.csdnimg.cn/blog_migrate/05f7fe74e366aa937b4613969313038d.png)
重写启动项目,效果如下:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BfIe0LBA-1654440845525)(Typora_image/024.png)]](https://i-blog.csdnimg.cn/blog_migrate/2971c9bc58b019e8f30ad654b13c30c4.png)

[注意] view处理函数的参数必须包含request,它是WSGIRequest类的实例,也是HttpRequest的子类。可以从request对象中获取客户端请求的路径以及请求头和body数据。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q4jr8oKJ-1654440845526)(Typora_image/026.png)]](https://i-blog.csdnimg.cn/blog_migrate/2820b78094c5adec028944680e98879c.png)
5.2 配置数据库信息
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IMUlOaJC-1654440845529)(Typora_image/027.png)]](https://i-blog.csdnimg.cn/blog_migrate/5246aa81581b3fdb9824a21c540c80a8.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YYrAcMTw-1654440845530)(Typora_image/028.png)]](https://i-blog.csdnimg.cn/blog_migrate/37b86cca7c2e0c64f353a66f9b5f2a7c.png)
5.3 写models
需要注意的点:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gW9eXnIT-1654440845533)(Typora_image/029.png)]](https://i-blog.csdnimg.cn/blog_migrate/f74dffb70dab3252ef37c03436697d53.png)
第一步,配置数据库,采用默认的数据库sqlite3(后面可替换成其他数据库)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZztdfB9o-1654440845534)(Typora_image/028.png)]](https://i-blog.csdnimg.cn/blog_migrate/1cb7106a6bf13046c1b6f47fdcfbf19b.png)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
第二步,创建模型类,在login模块的models.py添加如下代码:
class User(models.Model):
# 默认情况下,存在id字段
# 也就是说不设置主键,它会自己添加一个id字段,下行中设置了主键,数据表中就不会出现默认的id字段了
user_id = models.IntegerField(primary_key=True)
# 最大20个字符,不重复
name = models.CharField(max_length=20,unique=True)
pwd = models.CharField(max_length=100)
第三步,在主设置配置
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'login',
]
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YtTbdBg5-1654440845536)(Typora_image/030.png)]](https://i-blog.csdnimg.cn/blog_migrate/f5609e7bc45eb1a40b27c9e0c040f799.png)
第四步,生成数据表(模型类)的迁移文件
python manage.py makemigrations
[注意] 确认模型类所在的app是否添加到settings.py的INSTALLED_APPS列表中。(即做第四步的时候要完成第三步)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P79WVn0r-1654440845538)(Typora_image/031.png)]](https://i-blog.csdnimg.cn/blog_migrate/37051812068b7586f567a6c3543f0ce8.png)
第五步,执行数据模型类的迁移文件
python manage.py migrate
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4n1a4whA-1654440845541)(Typora_image/032.png)]](https://i-blog.csdnimg.cn/blog_migrate/17e336622c6198f7be02a786fe45b265.png)
[注意]:1.打开表的时候,需要reload刷新一下
2.此时表名的以"模块名_类名"命名的
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UH7PmnHw-1654440845542)(Typora_image/033.png)]](https://i-blog.csdnimg.cn/blog_migrate/7ea907c9254715a1dceb2f6cc06d9c8f.png)
【注意1】 第一次迁移时,会自动迁移django自带app下的迁移文件
【注意2】 如果修改了模型类,必须要’makemigrations’和’migrate’操作
python manage.py makemigrations
python manage.py migrate
5.4 修改模型
phone = models.CharField(max_length=11,null=True)
email = models.CharField(max_length=50,null=True)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jLAOiaoM-1654440845545)(Typora_image/034.png)]](https://i-blog.csdnimg.cn/blog_migrate/e87da03d7ded700a648bc1cf83054c8b.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wNTPy5jS-1654440845547)(Typora_image/035.png)]](https://i-blog.csdnimg.cn/blog_migrate/31075a9ccb8e006195cb020d1368c5da.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TfGJ9IKq-1654440845550)(Typora_image/036.png)]](https://i-blog.csdnimg.cn/blog_migrate/e931ba86d4cae4ccef0ffcb048845e5e.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a4aHcSXk-1654440845552)(Typora_image/037.png)]](https://i-blog.csdnimg.cn/blog_migrate/660d01051bd6a243f409af390376a4f5.png)
拓展一下:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OtgtVb5g-1654440845553)(Typora_image/038.png)]](https://i-blog.csdnimg.cn/blog_migrate/6b95a62fa6ebe580ecab96f203009204.png)
5.5生成SQL语句
python manage.py sqlmigrate 应用名 编号
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jPVP6Uro-1654440845554)(Typora_image/039.png)]](https://i-blog.csdnimg.cn/blog_migrate/b82989c2fed7a5dd7b098b9816eb9eb6.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8cWFYEsc-1654440845559)(Typora_image/040.png)]](https://i-blog.csdnimg.cn/blog_migrate/ec741a6034891dc45e98faa4e1f5808d.png)
5.6 shell调试模型
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eW0WnH0T-1654440845561)(Typora_image/041.png)]](https://i-blog.csdnimg.cn/blog_migrate/7d8be1b3b37dfdcef5b93ad3496c703c.png)
添加两条数据,进行测试
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fueOxFd4-1654440845563)(Typora_image/042.png)]](https://i-blog.csdnimg.cn/blog_migrate/45bd164a83379723494bd4df71db709c.png)
拓展:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y92g4ayo-1654440845567)(Typora_image/044.png)]](https://i-blog.csdnimg.cn/blog_migrate/ca0cacf87ddeb00fe1974d163ba6b95a.png)
命令:
python manage.py shell
>>> from login.models import User
>>> User.objects.all()
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iFmDKPDF-1654440845570)(Typora_image/043.png)]](https://i-blog.csdnimg.cn/blog_migrate/fe7f45a2e1803924cce67a8f6d939ee8.png)
【注意】objects是什么?
- objects是Model的元类中创建Manage类的实例,也是QuerySet查询结果类实例
- objects提供了对模型的查询相关方法
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2TENIXNR-1654440845571)(Typora_image/045.png)]](https://i-blog.csdnimg.cn/blog_migrate/0f26364a478e1e841e6274d292217a7c.png)
5.6.1 模型类操作
查询数据
User.objects.all()查询所有的数据,返回可迭代的对象(QuerySet实例),元素是模型类的实例对象。
issubclass() 方法用于判断参数 class 是否是类型参数 classinfo 的子类。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zo1SVii1-1654440845574)(Typora_image/046.png)]](https://i-blog.csdnimg.cn/blog_migrate/0b52dbc1d8e917af440e7dbf97b9321a.png)
查看QuerySet的方法
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FvOUvY7N-1654440845576)(Typora_image/047.png)]](https://i-blog.csdnimg.cn/blog_migrate/47270395c89bdf8da45ca4096eca893b.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8DrJS7ud-1654440845577)(Typora_image/048.png)]](https://i-blog.csdnimg.cn/blog_migrate/80c1cffe91f12bf3e4403ad536dcb212.png)
QuerySet常用的实例方法
- all() 全部查询
- first() 查第一个
- last() 查最后一个
- get(属性名=属性值) 查指定的 # pk主键列名属性
- delete() 删除
- filter(属性名=属性值) 过滤查询
- count() 统计记录个数

5.6.2 创建模型类实例
# 方式一
>>> u1 = User(name='a',pwd='1',phone='123345')
>>> u1.save()
# 方式二
>>> u3 = User()
>>> u3.name='ee'
>>> u3.pwd='133'
>>> u3.phone='5433'
>>> u3.save()
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2p1CDxHe-1654440845582)(Typora_image/050.png)]](https://i-blog.csdnimg.cn/blog_migrate/ddd3525130b1286d8db8d2018b3e5c81.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mZ4j1P9Q-1654440845586)(Typora_image/051.png)]](https://i-blog.csdnimg.cn/blog_migrate/8bfc0ee912095aad309d387a4522ca90.png)
模型类实例方法:
- save() 保存数据
- delete() 删除数据
- refresh_from_db() 同步数据 (从数据库的表中更新当前实例的属性)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xDudEpBI-1654440845587)(Typora_image/052.png)]](https://i-blog.csdnimg.cn/blog_migrate/d280d9f301edc6f20478bf0fa88bbb24.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PUHZfJ1a-1654440845590)(Typora_image/053.png)]](https://i-blog.csdnimg.cn/blog_migrate/0f348c2a57a254e9f484041cba634f83.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gZ7htpot-1654440845592)(Typora_image/054.png)]](https://i-blog.csdnimg.cn/blog_migrate/7aa2f93e2309fd086635d1c29d6be979.png)
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)