哪些请求方式在请求地址的时候可以带请求体?
只有PATCH、POST、PUT、DELETE访问一个url地址时可以带请求体
web框架和web服务器
web框架:flask Django
作用:
1.路由分发(根据url找到对应的处理函数)
2.调用处理函数进行业务处理。
web服务器 app.run()
作用:
1.解析请求报文,调用框架程序处理请求。
2.组织响应报文,返回内容给客户端。
web框架学习方法
-
如何搭建工程程序
工程的组建
工程的配置
路由定义
视图函数的定义
-
如何获取请求数据(操作request对象)
-
如何构造响应数据(构造response对象)
-
如何使用中间层
请求钩子
-
框架提供的其他功能组件
数据库
模板
admin
Django简介
Django的主要目的是简便、快速的开发数据库驱动的网站。强调代码复用、快速开发和DRY(不要自己重复造轮子)原则。
特点
1.重量级框架
Django原生提供了众多的功能组件,让开发更简便快速。
- 提供项目工程管理的自动化脚本工具
- 数据库ORM支持(对象关系映射,英语Object Relational Mapping)
- 模板
- 表单
- Admin站点
- 文件管理
- 认证权限
- session机制
- 缓存
2.MVT开发模式
Model(模型)-View(视图)-Template(模板)
Model,负责和数据库交互,进行数据处理
View,用于接收请求,处理业务逻辑
Template,负责封装构造要返回的html
其实和MVC框架一样
Django框架环境安装&项目创建
1)命令
mkvirtualenv name -p python3 # 创建虚拟环境
workon name # 进入虚拟环境
pip install django==1.11.11 # 安装django
cd 目录 # 切换目录
django-admin startproject <项目名称> # 创建项目
python manage.py startapp #创建子应用
2)进行子应用注册
点开项目目录下的settings,在INSTALLED_APPS中配置
3)启动
python manage.py runserver
定义视图函数
定义在子应用的views.py中
需要request接收请求并返回响应对象
def index(requset):
"""request:接收请求对象"""
# 返回相应对象
return HttpResponse('hello world')
URL配置
1) 在子应用中创建urls.py,设置子应用中url地址和视图函数之间的对应关系
from django.conf.urls import url
from users import views
urlpatterns = [
# 添加当前子应用中url地址和视图函数之间的对应关系
# url('地址url正则表达式','对应视图函数')
url(r'index',views.index),
]
2)在项目总的urls.py文件中包含子应用中的urls.py文件
from django.conf.urls import url, include
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
# 包含子应用中urls.py文件
url(r'^users/',include('users.urls'))
]
3)Django路由匹配过程说明
先找项目总的urls.py中正则匹配url地址,调用视图函数,再进入子应用中的urls.py进行正则匹配,调用视图函数
4) 路由配置时两个注意点:
在子应用中进行url配置时,严格匹配开头和结尾
Django url 地址配置的默认风格时:末尾加/
url(r'^index/$', views.index)
5)Django路由配置-url地址的反向解析
总的应用中定义别名用namespace=’’
url(r'^users/', include('users.urls', namespace='users')),
子应用中定义别名用name=’’
url(r'^index/$', views.index, name='index'),
根据视图获取对应的url地址,通常配合重定向进行使用。
def url_reverse(request):
# 获取index视图所对应的url地址
from django.urls import reverse
req_url = reverse('users:index')
return HttpResponse('OK')
配置文件settings.py
1)BASE_DIR(根目录)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
2)DEBUG
- 修改代码文件,程序自动重启
- Django程序出现异常时,向前端显示详细的错误追踪信息
3)中国语言与时区
在settings.py中配置
# Internationalization
# https://docs.djangoproject.com/en/1.11/topics/i18n/
# LANGUAGE_CODE = 'en-us' # 设置语言
LANGUAGE_CODE = 'zh-Hans' # 设置语言
# TIME_ZONE = 'UTC' # 设置时区
TIME_ZONE = 'Asia/Shanghai' # 设置时区
4)静态文件的使用
在settings.py中配置
1)设置访问静态文件路径的前缀地址
2)指定Django中静态文件存放的目录
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.11/howto/static-files/
# 设置访问静态文件路径的前缀地址
STATIC_URL = '/static/'
# 指定Django中静态文件存放的目录
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
请求参数传递
4种传参方式
1.通过url地址传递参数(利用正则表达式提取参数的方法从url中获取请求参数)
#/weather/城市名/年份/:比如:/weather/shanghai/2019/
#flask: 路由转换器 /weather/<city>/<int:year>
#Django:
#未命名参数按定义顺序传递,正则需要小括号括起来,分组
#在urls中配置正则
url(r'^weather/([a-z]+)/(\d{4})/$', views.weather),
#在视图函数中获取
def weather(request, city, year):
print('city=%s' % city)
print('year=%s' % year)
return HttpResponse('OK')
#命名参数按名字传递
#在urls中配置正则 ?P给参数起别名
url(r'^weather/(?P<city>[a-z]+)/(?P<year>\d{4})/$', views.weather),
#在视图函数中获取
def weather(request, year, city):
print('city=%s' % city)
print('year=%s' % year)
return HttpResponse('OK')
2.请求参数传递(通过查询字符串传参)
# /qs/?a=1&b=2&c=3&c=4
# flask:request.args
def get_qs(request):
# 获取查询字符串的参数
a = request.GET.get('a')
b = request.GET.get('b')
c = request.GET.get('c') # ,如果c对应多个值,默认只查询到最后一个值
clist = request.GET.getlist('c') # 使用此方法可以查询c的列表
return HttpResponse('OK')
3.通过请求体传递参数(json数据或表单)
表单数据:/from_data/
request.POST:QueryDict类型的对象,允许一个键对应多个值
request.POST.get('name')
request.POST.get('age')
<from methods='get' action='提交地址'>
<input type='text' name='a'/>
<input type='text' name='b'/>
<input type='submit' value='提交'/>
</from>
json数据:/json_data/
request.body
import json
def get_body_json(request):
json_str = request.body
json_str = json_str.decode() # python3.6 无需执行此步
req_data = json.loads(json_str)
print(req_data['a'])
print(req_data['b'])
return HttpResponse('OK')
注意:使用postman必须注释csrf功能ÿ