当前位置:   article > 正文

Python之Django框架(一)_django 空白框架

django 空白框架

Django project

前言:

官方文档:https://docs.djangoproject.com/zh-hans/3.0/

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rJEmtwWz-1654440845479)(Typora_image/001.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)]]

点击“Create"

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wdbVVz9q-1654440845483)(Typora_image/003.png)]

拓展:

激活Django环境

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xKhgIiH4-1654440845484)(Typora_image/004.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RbSddBPD-1654440845486)(Typora_image/005.png)]

2.安装django包

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fp0cMpMM-1654440845487)(Typora_image/006.png)]

[拓展]:在django的交互环境里查看版本

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nDXCUFH2-1654440845488)(Typora_image/007.png)]

在python.console里面也可以验证

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sg3czUR0-1654440845489)(Typora_image/008.png)]

2.1 django-admin命令

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5QR4mP7O-1654440845490)(Typora_image/009.png)]

3.创建应用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fnVXMIAN-1654440845492)(Typora_image/010.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ypAECutc-1654440845493)(Typora_image/013.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LQTF44Bg-1654440845494)(Typora_image/011.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J7aj0PxF-1654440845496)(Typora_image/012.png)]

manage.py:一个让你用各种方式管理Django项目的命令行工具

# 原始建法
django-admin startapp 

# 当用manage.py脚本后
python manage.py startapp
  • 1
  • 2
  • 3
  • 4
  • 5

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vdD9HpEJ-1654440845497)(Typora_image/014.png)]

4.启动项目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GkHnLzJK-1654440845499)(Typora_image/015.png)]

还可以自定义端口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OUVaWm3K-1654440845502)(Typora_image/016.png)]

也可以指定IP的绑定的host:

python manage.py runserver 0:9000
  • 1

0:表示0.0.0.0,绑定当前host主机的实际IP地址

在浏览器中,如果要访问本地的IP地址,可以访问:
- http://localhost:9000
- http://127.0.0.1:9000
- http://(通过终端查询到的ip地址):9000
  • 1
  • 2
  • 3
  • 4

[注意]

修改主工程目录下的settings.py文件

ALLOWED_HOSTS = ['*']    # 白名单
  • 1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6AFlxPy6-1654440845504)(Typora_image/017.png)]

4.创建登录应用

python manage.py startapp login
  • 1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IMMuIOro-1654440845506)(Typora_image/018.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 将数据渲染出来
  • 1
  • 2
  • 3
  • 4

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')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在主工程的主路由里面,添加如下代码,并启动

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r6cA0Cxp-1654440845506)(Typora_image/019.png)]

效果展示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7Hk81Wga-1654440845513)(Typora_image/020.png)]

还可以创建子路由来访问Web

- 使用子路由时,将子路由添加到主路由里
  • 1

主路由修改:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vfwZ7P5E-1654440845518)(Typora_image/021.png)]

子路由修改

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uJ1QaXiA-1654440845520)(Typora_image/022.png)]

login里views里的接口修改:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6PncXWP5-1654440845523)(Typora_image/023.png)]

重写启动项目,效果如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BfIe0LBA-1654440845525)(Typora_image/024.png)]
在这里插入图片描述

[注意] view处理函数的参数必须包含request,它是WSGIRequest类的实例,也是HttpRequest的子类。可以从request对象中获取客户端请求的路径以及请求头和body数据。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q4jr8oKJ-1654440845526)(Typora_image/026.png)]

5.2 配置数据库信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IMUlOaJC-1654440845529)(Typora_image/027.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YYrAcMTw-1654440845530)(Typora_image/028.png)]

5.3 写models

需要注意的点:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gW9eXnIT-1654440845533)(Typora_image/029.png)]

第一步,配置数据库,采用默认的数据库sqlite3(后面可替换成其他数据库)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZztdfB9o-1654440845534)(Typora_image/028.png)]

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

第二步,创建模型类,在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)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

第三步,在主设置配置

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'login',
]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YtTbdBg5-1654440845536)(Typora_image/030.png)]

第四步,生成数据表(模型类)的迁移文件

python manage.py makemigrations
  • 1

[注意] 确认模型类所在的app是否添加到settings.py的INSTALLED_APPS列表中。(即做第四步的时候要完成第三步)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P79WVn0r-1654440845538)(Typora_image/031.png)]

第五步,执行数据模型类的迁移文件

python manage.py migrate
  • 1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4n1a4whA-1654440845541)(Typora_image/032.png)]

[注意]:1.打开表的时候,需要reload刷新一下

​ 2.此时表名的以"模块名_类名"命名的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UH7PmnHw-1654440845542)(Typora_image/033.png)]

【注意1】 第一次迁移时,会自动迁移django自带app下的迁移文件

【注意2】 如果修改了模型类,必须要’makemigrations’和’migrate’操作

python manage.py makemigrations
python manage.py migrate
  • 1
  • 2
5.4 修改模型
phone = models.CharField(max_length=11,null=True)
email = models.CharField(max_length=50,null=True)
  • 1
  • 2

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jLAOiaoM-1654440845545)(Typora_image/034.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wNTPy5jS-1654440845547)(Typora_image/035.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TfGJ9IKq-1654440845550)(Typora_image/036.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a4aHcSXk-1654440845552)(Typora_image/037.png)]

拓展一下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OtgtVb5g-1654440845553)(Typora_image/038.png)]

5.5生成SQL语句
python manage.py sqlmigrate 应用名  编号
  • 1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jPVP6Uro-1654440845554)(Typora_image/039.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8cWFYEsc-1654440845559)(Typora_image/040.png)]

5.6 shell调试模型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eW0WnH0T-1654440845561)(Typora_image/041.png)]

添加两条数据,进行测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fueOxFd4-1654440845563)(Typora_image/042.png)]

拓展:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y92g4ayo-1654440845567)(Typora_image/044.png)]

命令:

python manage.py shell
  • 1
>>> from login.models import User
>>> User.objects.all()

  • 1
  • 2
  • 3

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iFmDKPDF-1654440845570)(Typora_image/043.png)]

【注意】objects是什么?

- objects是Model的元类中创建Manage类的实例,也是QuerySet查询结果类实例
- objects提供了对模型的查询相关方法
  • 1
  • 2

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2TENIXNR-1654440845571)(Typora_image/045.png)]

5.6.1 模型类操作

查询数据

User.objects.all()查询所有的数据,返回可迭代的对象(QuerySet实例),元素是模型类的实例对象。
  • 1

issubclass() 方法用于判断参数 class 是否是类型参数 classinfo 的子类。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zo1SVii1-1654440845574)(Typora_image/046.png)]

查看QuerySet的方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FvOUvY7N-1654440845576)(Typora_image/047.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8DrJS7ud-1654440845577)(Typora_image/048.png)]

QuerySet常用的实例方法
- all()  全部查询
- first() 查第一个
- last()  查最后一个
- get(属性名=属性值)  查指定的    # pk主键列名属性
- delete()   删除
- filter(属性名=属性值) 过滤查询
- count()  统计记录个数
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在这里插入图片描述

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2p1CDxHe-1654440845582)(Typora_image/050.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mZ4j1P9Q-1654440845586)(Typora_image/051.png)]

模型类实例方法:

- save() 保存数据
- delete() 删除数据
- refresh_from_db() 同步数据 (从数据库的表中更新当前实例的属性)
  • 1
  • 2
  • 3

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xDudEpBI-1654440845587)(Typora_image/052.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PUHZfJ1a-1654440845590)(Typora_image/053.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gZ7htpot-1654440845592)(Typora_image/054.png)]

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/399014
推荐阅读
相关标签
  

闽ICP备14008679号