文章目录
网页伪静态
什么是伪静态?
伪静态页面是指动态网页通过重写URL的方法实现去掉动态网页的参数,但在实际的网页目录中并没有必要实现存在重写的页面。
作用:
将动态网页伪装成静态网页 从而提升网页被搜索引擎收录的概率
表现形式就是网址看着像一个具体的文件路径
举例说明:
path('index.html', view.index)
视图层
视图函数的返回值
视图函数其实都必须返回一个HttpResponse对象
当浏览器向服务器发起数据请求的时候,那么服务器用来响应的视图函数的返回值的种类有两种,分别是HTML响应(HttpResponse、render、redirect)和JsonResponse(前后端分离)
其实HTML的三种响应方式返回的都是一个HttpResponse对象(可以查看源码)
注意:HttpResponse是一个类(可以查看源码)
-
HttpResponse
不使用模板,直接HttpResponse()
例如:创建一个视图函数def testResponse(request): response = HttpResponse() response.content = '加油' response.status_code = 404 # 直接写出文本 response.write('lzq') # 一次性读取剩余字节,冲刷缓存区 response.flush() return response
效果图:
-
render
render方法的返回值类型也是一个HttpResponsedef testRender(request): response = render(request,'testRender.html') print(type(response)) return response 输出结果:<class 'django.http.response.HttpResponse'>
-
Redirect
重定向
其是HttpResponse的子类,响应重定向:可以实现服务器内部跳转
视图函数返回json格式数据
-
方法一
json序列化形式def index(request): user_dict = { 'name': 'jason', 'age': 123} data = json.dumps(user_dict) return HttpResponse(data)
如果字典数据中存在中文字,输出的结果会进行编码,所以我们可以加参数
ensure_ascii
,这个参数默认情况下为Ture,我们让这个参数等于False即可 -
方法二
JsonResponse序列化形式def index(request): # 视图函数返回json格式数据 user_dict = { 'name': 'jason', 'age': 123} return JsonResponse(user_dict)
如果字典数据中存在中文字,输出的结果会进行编码,所以这里的处理方式需要我们看一看JsonResponse的源码:
我们可以看到,如果json_dumps_params如果为None的话,就是一个空字典;然后又根据关键字形参的知识我们可以加
json_dumps_params={'ensure_ascii': False}
补充:
JsonResponse这个类是HttpRespon的子类,它主要和父类的区别在于:
1.它的默认Content-Type 被设置为: application/json
2.第一个参数,data应该是一个字典类型,当 safe 这个参数被设置为:False ,那data可以填入任何能被转换为JSON格式的对象,比如list, tuple, set。 默认的safe 参数是 True. 如果你传入的data数据类型不是字典类型,那么它就会抛出 TypeError的异常。
序列化非字典类型的数据还需要指定safe参数为False
接收文件数据
注意事项:
-
enctype属性需要由默认的urlencoded变成form/data(
enctype="multipart/form-data"
) -
method属性需要由默认的get变成post
(目前还需要考虑的是 提交post请求需要将配置文件中的csrf中间件注释)
-
如果form表单上传文件 后端需要在request.FILES获取文件数据 而不再是POST里面
举例说明:
views.py
def file(request): # 文件数据的读取
if request.method == 'POST':
file_info = request.FILES.get('file')
with open(file_info.name, 'wb') as f:
for line in file_info:
f