广州番禺Python, Java小班周末班培训
薯条老师在广州做Python和Java的小班培训,一个班最多10人,学员的平均就业薪资有11K。不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习。培训的课程有Python爬虫,Python后端开发,Python办公自动化,Python大数据分析,Python量化投资,Python机器学习,Java中高级后端开发。授课详情请点击:http://chipscoco.com/?cate=6
3.4.1 使用HttpResponse响应json数据
django视图在收到客户端的请求以后,必须返回HttpResponse对象或HttpResponse的子类对象。HttpResponse默认响应的数据类型为html文本,其对应的MIME类型为text/html。对于浏览器来说,从服务端返回的数据都是HTML文本,通过在服务端定义数据的MIME类型,可以让浏览器按不同的数据类型对数据进行解析。以JSON格式进行举例,服务端将响应的MIME类型设置为application/json,那么浏览器会对响应的数据解析为json格式。
代码实例-在django中响应json格式的数据:
# 在views.py中导入json模块 import json # 新增的视图类Json class Json(View): def get(self, request): data = {"author": "薯条老师"} # 响应的数据中包含非ASCII字符,需要将ensure_ascii设置为False json_data = json.dumps(data, ensure_ascii=False) # 通过HttpResponse的content_type参数来指定MIME类型 return HttpResponse(json_data, content_type="application/json")
在urls.py中定义与Json视图的路由:
urlpatterns = [ # 定义与json视图的路由 path('json/', blog.Json.as_view()), ]
现在进入windows命令行,切换到D盘所在的django-project目录,执行python manage.py runserver 8080启动django服务器。服务器启动成功以后,在浏览器地址栏输入http://127.0.0.1:8080/json/,并按下回车键:
从浏览器中可以看到从django中响应的数据,此时再按下键盘的F12键,进入浏览器的调试模式(薯条老师使用的为谷歌浏览器):
再按下键盘的CTRL+R组合键刷新页面:
点击右侧调试窗口中的json/,在Headers菜单中,可以查看数据的MIME类型:
从Content-Type字段中可以看出,数据的MIME类型为application/json。
3.4.2 使用JsonResponse响应Json数据
在上节内容中,我们做了以下两步操作,以响应json格式的数据:
(1) 先利用json模块,将字典对象序列化为json格式的数据
(2) 通过HttpResponse构造函数的content_type参数,将数据的MIME类型指定为application/json。
在实际开发中,我们可以将这两步操作封装起来,以减少冗余的代码。通常的做法是,从HttpResponse中派生一个子类,然后在子类中通过json模块对Python中的可序列化对象进行序列化,同时设置content_type参数为application/json。以上正是JsonResponse的实现原理,JsonResponse是Django的内置类型,其继承于HttpResponse,会自动将Python中的可序列化对象进行序列化,同时设置数据的MIME类型为application/json。
代码实例-使用JsonResponse响应json格式的数据:
# 使用JsonResponse,需要从django.http模块中导出 from django.http import JsonResponse # 新增的视图类Json class Json(View): def get(self, request): data = {"author": "薯条老师"} # 直接通过JsonResponse来响应Json格式的数据 # 响应的数据中包含非ASCII字符,需要将ensure_ascii设置为False return JsonResponse(data,json_dumps_params={'ensure_ascii':False})
重复3.4.1节中的操作,在浏览器调试窗口中,我们可以发现数据的MIME类型为application/json。
3.4.3 使用FileResponse下载文件
FileResponse是HttpResponse的间接子类,用来提供文件下载。我们现在进入Python交互模式执行from django.http import FileResponse导入FileResponse, 然后执行help(FileResponse)查看FileResponse的类定义:
>>> from django.http import FileResponse
>>> help(FileResponse)
Help on class FileResponse in module django.http.response:
class FileResponse(StreamingHttpResponse)
| FileResponse(*args, as_attachment=False, filename='', **kwargs)
|
| A streaming HTTP response class optimized for files.
|
| Method resolution order:
| FileResponse
| StreamingHttpResponse
| HttpResponseBase
| builtins.object
|
| Methods defined here:
|
| __init__(self, *args, as_attachment=False, filename='', **kwargs)
| Initialize self. See help(type(self)) for accurate signature.
从输出可知FileResponse继承于StreamingHttpResponse,其构造函数主要有两个参数,分别是as_attachment以及filename。参数as_attachment表示以附件的形式下载,filename表示文件名。使用FileResponse进行文件下载,需要将MIME类型设置为application/octet-stream,同时设置文件的下载方式。代码实例-使用FileResponse提供文件下载:
import os # 使用FileResponse,需要从django.http模块中导出 from django.http import FileResponse # 新增的视图函数file_download def file_download(request, file_path): ext = os.path.basename(file_path).split('.')[-1].lower() # 只支持下载txt,word,excel格式的文件 if ext in ['txt', 'dox', 'doxs','dox', 'xlsx']: response = FileResponse(open(file_path, 'rb')) # 设置MIME类型为application/octet-stream response['content_type'] = "application/octet-stream" # HTTP协议的Content-Disposition字段用来配置文件的下载方式,文件的基本信息 # attachment表示以附件的形式下载文件 response['Content-Disposition']='attachment;filename={}'.format(os.path.basename(file_path)) return response
编写好视图函数以后,需要在urls.py中定义路由。
3.4.4 最具实力的小班培训
薯条老师在广州做Python和Java的小班培训,一个班最多10人。不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习。打算参加小班培训的同学,必须遵守薯条老师的学习安排,认真做作业和项目。把知识学好,学扎实,那么找到一份高薪的工作就是很简单的一件事。
(1) Python后端工程师高薪就业班,月薪11K-18K,免费领取课程大纲
(2) Python爬虫工程师高薪就业班,年薪十五万,包拿Offer
(3) 数据分析高薪就业班,月薪11K-15K, 免费领取课程大纲
(4) Python大数据挖掘,量化投资就业班,月薪12K-25K,免费领取课程大纲
扫码免费领取Python学习资料: