官方文档:https://docs.djangoproject.com/zh-hans/3.0/
注意: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。
点击“Create"
拓展:
激活Django环境
[拓展]:在django的交互环境里查看版本
在python.console里面也可以验证
manage.py:一个让你用各种方式管理Django项目的命令行工具
# 原始建法
django-admin startapp
# 当用manage.py脚本后
python manage.py startapp
4.启动项目
还可以自定义端口
也可以指定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 = ['*'] # 白名单
python manage.py startapp login
应用目录结构: |
---|
- 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 将数据渲染出来
在login应用中的views.py里,写如下代码
from django.http import HttpResponse
from django.shortcuts import render
# Create your views here.
def index(request):
return HttpResponse('hello world')
在主工程的主路由里面,添加如下代码,并启动
效果展示:
还可以创建子路由来访问Web
- 使用子路由时,将子路由添加到主路由里
主路由修改:
子路由修改
login里views里的接口修改:
重写启动项目,效果如下:
[注意] view处理函数的参数必须包含request,它是WSGIRequest类的实例,也是HttpRequest的子类。可以从request对象中获取客户端请求的路径以及请求头和body数据。
需要注意的点:
第一步,配置数据库,采用默认的数据库sqlite3(后面可替换成其他数据库)
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',
]
第四步,生成数据表(模型类)的迁移文件
python manage.py makemigrations
[注意] 确认模型类所在的app是否添加到settings.py的INSTALLED_APPS列表中。(即做第四步的时候要完成第三步)
第五步,执行数据模型类的迁移文件
python manage.py migrate
[注意]:1.打开表的时候,需要reload刷新一下
2.此时表名的以"模块名_类名"命名的
【注意1】 第一次迁移时,会自动迁移django自带app下的迁移文件
【注意2】 如果修改了模型类,必须要’makemigrations’和’migrate’操作
python manage.py makemigrations
python manage.py migrate
phone = models.CharField(max_length=11,null=True)
email = models.CharField(max_length=50,null=True)
拓展一下:
python manage.py sqlmigrate 应用名 编号
添加两条数据,进行测试
拓展:
命令:
python manage.py shell
>>> from login.models import User
>>> User.objects.all()
【注意】objects是什么?
- objects是Model的元类中创建Manage类的实例,也是QuerySet查询结果类实例
- objects提供了对模型的查询相关方法
查询数据
User.objects.all()查询所有的数据,返回可迭代的对象(QuerySet实例),元素是模型类的实例对象。
issubclass() 方法用于判断参数 class 是否是类型参数 classinfo 的子类。
查看QuerySet的方法
QuerySet常用的实例方法
- all() 全部查询
- first() 查第一个
- last() 查最后一个
- get(属性名=属性值) 查指定的 # pk主键列名属性
- delete() 删除
- filter(属性名=属性值) 过滤查询
- count() 统计记录个数
# 方式一
>>> u1 = User(name='a',pwd='1',phone='123345')
>>> u1.save()
# 方式二
>>> u3 = User()
>>> u3.name='ee'
>>> u3.pwd='133'
>>> u3.phone='5433'
>>> u3.save()
模型类实例方法:
- save() 保存数据
- delete() 删除数据
- refresh_from_db() 同步数据 (从数据库的表中更新当前实例的属性)