建新项目
配置settings
- ALLOWED_HOSTS = ['*']
- 添加创建的APP
数据库:
- ENGINE
- NAME(数据库名):记得提前创建数据库
- USER
- PASSWORD
- HOST
- PORT
- 语言:LANGUAGE_CODE = 'zh-Hans'
- 时间:TIME_ZONE = 'Asia/Shanghai'
- 时区:USE_TZ = False
- 静态文件夹路径:
STATIC_DIRS = [
os.path.join(BASE_DIR, 'static')
]
伪装数据库驱动
pycharm连接数据库
迁移数据
url注册
path('app/', include(('App.urls', 'App'), namespace='app')),
include中有两个参数,一个是子路由,另一个是app名字,不填app名字,用反向解析的时候会报错
Response
客户端传送数据给服务端,使用request主动发送数据
而后客户端被动响应发送数据称为response
Response返回方式
1. 不使用模板,直接HttpResponse()
2. 调用模板,进行渲染
2.1 先load模板,再渲染
2.2 直接使用render一步到位
render(request, template_name , context)
request
请求体对象
template_name 模板路径
context 字典参数,用来填坑
HttpResponse
属性:
- content 返回的内容
- charset 编码格式
- status_code 响应状态码(200,3xx,404,5xx)
MIME类型
- 作用:指定传输数据使用哪种形式打开
格式:大类型/小类型
- image/png
- image/jpg失真率高,可压缩空间大,不支持透明文件
方法
- init 初始化内容
- write(xxx) 直接写出文本
- flush() 搭配write,冲刷缓冲区,理解成马桶,用完了冲一次
- set_cookie(key,value='xxx',max_age=None,exprise=None)
delete_cookie(key) 删除cookie,上面那个是设置
子类
HttpResponseRedirect
- 重定向,暂时
- 302
- 简写 redirect
JsonResponse
- 以Json格式返回数据
- 重写了__init__,序列化Json数据,指定content_type 为application/json
HttpResponsePermanentRedirect
- 重定向,永久性
- 301
HttpResponseBadRequest
- 400
HttpResponseNotFound
- 404
HttpResponseForbidden
- 403
HttpResponseNotAllowed
- 405
HttpResponseServerError
- 500
Http404
- Exception
- raise 主动抛异常出来
实践:HttpResponse
建立一个新url
url(r'^hello/', views.hello, name='hello')
views函数来返回一个内容为hello的response
def hello(request):
return HttpResponse('hello')
我们也可以用新的方式返回
def hello(request):
response = HttpResponse()
response.content = '艾欧尼亚在召唤'
return response
我们也可以在检查元素时查看requese请求的具体信息
如图,状态码,类型,大小,传输实践,等等
我们也可以在views视图中强行修改状态码:
def hello(request):
response = HttpResponse()
response.content = '艾欧尼亚在召唤'
response.status_code = 404
return response
如图,我们仍然可以访问到艾欧尼亚在召唤,但是状态码变为了404
强行修改状态码的原因
为了满足特殊需求
- 页面真的访问不存在,但是需要帮助客户端正确处理,比如说淘宝的宝贝不存在界面
- 比较坏的一件事,为了防止爬虫,爬虫在爬取数据的时候需要先请求我们,只有在请求成功的时候才会爬取数据,但是我们人为返回404代码这样就可以欺骗爬虫访问失败,以至于防止了爬虫的爬取数据。(开发与爬虫的博弈)
爬虫
- 模拟人去请求数据
- 提取数据
- 存储数据
爬虫核心内容
- 数据爬取
- 数据提取
- 数据存储
提升效率
- 进程
- 线程
- 协程
文件的扩展名只是标识作用,方便我们用关联的程序去打开,比如说一个音乐文件改成.jpg,但是我们依旧可以用音乐播放器去打开它,后缀对文件内容没有影响
flush刷新缓冲区
HttpResponse子类
HttpResponseRedirect
响应重定向:可以实现服务器内部跳转
return HttpResponseRedict('/grade/2017')
使用的时候推荐使用反向解析
实践:HttpResponseRedirect
缩写为redirect
新建url:url('^getticket/', views.get_ticket, name='get_ticket')
views函数:
def get_ticket(request):
if random.randrange(10) > 5:
return HttpResponseRedirect('/app/hello') # 模拟服务器正忙时,重定向至另外一个页面
return HttpResponse('恭喜你抢到票了')
这样我们服务器便会重定向了
可以看到,我们的状态码是300多为重定向
我们也可以用反向解析将/app/hello硬编码进行更换,反向解析在views视图中的用法如下:
def get_ticket(request):
if random.randrange(10) > 5:
url = reverse('app:hello')
return HttpResponseRedirect(url) # 模拟服务器正忙时,重定向至另外一个页面
return HttpResponse('恭喜你抢到宝贝了')
JsonResponse
返回Json数据的请求,通常用在异步请求上,前后端分离
JsonResponse(dict)
也可以使用__init__(self,data)设置数据
Content-type是application/json
json简介
JsonObject
- { }
- key - value
JsonArray
- [ ]
- 列表中可以是普通数据类型,也可以是JsonObject
- JsonObject和JsonArray可以嵌套
- 给移动端的 Json,用JsonResponse
给Ajax,用JsonResponse
- 前后端
- DRF框架
Google Chrome
- JsonFomatter格式化JSON结构
实践:JsonResponse
url:url('^getinfo/', views.get_info, name='get_info'),
views:
def get_info(request):
data = {
'status': 200,
'msg': 'ok',
}
return JsonResponse(data=data)
此处评论已关闭