Django--视图层
Posted liu--huan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django--视图层相关的知识,希望对你有一定的参考价值。
自定义转换器(django2.0)
from django.urls import path, re_path, register_converter class MyCon: # 写一个正则表达式 regex = ‘[0-9]{4}‘ # 匹配出來的数据,会传到这里,retrun回去的,会被视图函数接收 def to_python(self, value): return int(value) # 反向解析用的 def to_url(self, value): return ‘%04d‘ % value from django.urls import register_converter register_converter(MyCon,‘yyy‘) path(‘test/<yyy:year>‘, views.re_test, name=‘test‘),
视图层——HttpRequest对象
路由层: urlpatterns = [ path(‘admin/‘, admin.site.urls), re_path(‘^test/(.*)‘, views.re_test), ] 视图函数: def re_test(request,every): # request.POST # 前台Post传过来的数据,包装到POST字典中 # request.GET # 前台浏览器窗口里携带的数据,包装到GET字典中 # request.method # 前台请求的方式 # request.body # post提交的数据,body体的内容,前台会封装成:name=lqz&age=18&sex=1 # print(request.path) # 取出请求的路径,取不到数据部分 # print(request.get_full_path()) # 取出请求的路径,能取到数据部分 结果:/test/user?name=xx&password=123 # print(request.META) return HttpResponse(‘request‘)
视图层——HttpResponse对象
方法(1) def re_test(request,every): # print(request.META) user = {‘user‘: ‘lxx‘} print(every) return render(request,‘lxx.html‘,{‘name‘:user}) 方法(2) from django.template import Template,Context def re_test(request,every): if request.method == ‘GET‘: temp = Template(‘<h1>{{ user }}</h1>‘) data = Context(‘{"user":"lxx"}‘) ret = temp.render(data) return HttpResponse(ret)
视图层——JsonResponse对象
方法(1) def re_test(request,every): user = {‘user‘: ‘lxx‘} js_data = json.dumps(user) return HttpResponse(js_data) 方法(2) 报错,默认不支持列表形式,要想支持改源码条件 def re_test(request,every): lis = [1,3] return JsonResponse(lis,safe=False)
视图层——CBV(类的视图)与FBV(函数视图)
路由层:url(r‘^test/‘, views.Test.as_view()), 视图层: from django.views import View class Test(View): def get(self, request):#一定要传request对象 return HttpResponse(‘get-test‘) def post(self, request): return HttpResponse(‘post-test‘)
补充知识点(1):
路由跳转最原始页面与报错页面
urlpatterns = [
url(r‘^$‘, views.autherlist), 不输跳到最原始页面
...
url(r‘.*‘, views.error) 输任意字符跳转到报错页面
]
补充知识点(2):
%04d 占四位,少了前面用0补上,多了就是多了
补充知识点(3):
APPEND_SLASH = false 等于false不会补上 /
浏览器页面书路径时,默认会 给你补上 / http://127.0.0.1:8000/autherlist/
练习:
1 手动创建虚拟环境--用命令
2 往前台返回user字典:[{name:lqz,age:18},{name:lqz2,age:18}]
3 写一个文件上传:如果文件名字重复,不要覆盖,并且放到项目根路径的media文件夹下
以上是关于Django--视图层的主要内容,如果未能解决你的问题,请参考以下文章