首页 > 其他分享 >django框架(04)

django框架(04)

时间:2022-12-13 20:58:46浏览次数:54  
标签:index return 04 框架 request 视图 django 路由 view

目录

今日内容详细

路由分发

djanogo支持每个应用都可以有自己独立的路由层、静态文件、模板层。基于该特性多人开发项目就可以完全解耦合, 之后利用路由分发还可以整合到一起

多个应用都有很多路由与视图函数的对应关系 这个时候可以拆分到各自的路由层中

使用路由分发之前 总路由直接干路由与视图函数的匹配
	path('index/',index)
使用路由分发之后 总路由只按照应用名分配匹配方向
	path('app01/', include('app01.urls'))

名称空间

路由分发之后 针对相同的别名能否自动反向解析出不同的应用前缀
	默认情况下是无法直接识别应用前缀的
    
如果想要正常识别区分有两种方式
	方式1:名称空间
        总路由
     	        path('app01/',include(('app01.urls','app01'),namespace='app01')),
 path('app02/',include(('app02.urls','app02'),namespace='app02')),
		反向解析
    	reverse('app01:index_view')
        reverse('app02:index_view')
        
        
    方式2: 别名不冲突即可
        多个应用别名不冲突可以用应用名作为别名的前缀
    path('index/', views.index, name='app01_index_view')
    path('index/', views.index, name='app02_index_view')
    

虚拟环境

项目1需要使用:django1.11
    python38
项目2需要使用:django2.22 pymysql requests
    python38
项目3需要使用:django3.22 request_html flask urllib3		 python38
实际开发项目中我们只会给项目配备所需要的环境, 不需要的一概不配!!!

虚拟环境:能够针对相同版本的解释器创建多个分身 每个分身可以有自己独立的环境
    
 
pycharm创建虚拟环境:(每创建一个虚拟环境就相当于重新下载了一个全新的解释器)
 命令行的方式: python -m venv pyvenv38
  
注意:python命令此处不支持多版本共存的操作 Python27 python36 python38
    激活
    	activate
    关闭
    	deactivate
  
pip install --index-url http://mirrors.aliyun.com/pypi/simple/ django==1.11.11 --trusted-host mirrors.aliyun.com

视图层之必会三板斧

用来处理请求的视图函数都必须返回HttpResponse对象   正确
class HttpResponse:
    pass  				 访问失败
return HttpResponse()     可以返回

def render():        
    return HttpResponse()   # render源代码里面也是返回HttpResponse
return render()

def redirect():
    redirect_class = 类(祖先有个类是HttpResponse)
    return redirect_class()
return redirect()

JsonResponse对象

from django.http import JsonResponse
def index_func(request):
   # 返回给浏览器一个json格式的字符串
   user_dict = {'name':'jason老师','age':18}
   import json
   user_json = json.dumps(user_dict,ensure_ascii=False)
   return HttpResponse(user_json)
	
# 使用JsonResponse:
	return JsonResponse(user_dict)

ps:以后写代码很多时候肯恶搞需要参考源码及所知识扩展功能
    class JsonResponse():
        def __init__(self,data,json_dumps_params=None);
        
 json.dumps(data,**json_dumps_params)

JsonResponse主要序列化字典 针对非字典的其他可以被序列化的数据需要修改safe参数为False

视图层之request对象获取文件

form表单携带文件类型的数据需要做到已下机电
	1.method必须是POST
    2. enctype必须是"multipart/form-data"
    
        if request.method == 'POST':
        # print(request.POST)   # 获取普通数据
        # print(request.FILES)  # 获取文件数据
        file_obj = request.FILES.get('file')
        print(file_obj.name)  # 获取文件名称
        with open(r'%s' % file_obj.name, 'wb') as f:
            for line in file_obj:
                f.write(line)
    return render(request, 'indexPage.html')

视图层之FBV与CBV

FBV
	基于函数的视图
    def index(request):return HttpResponse对象
    
CBV
	基于类的视图
    from django import views
    class MyLoginView(views.View):
        def get(self, request):
            return HttpResponse('from CBV get function')
    	
        def post(self, request):
            return HttpResponse('from CBV post fucntion')
      path('login/',views.MyLoginView.as_view())
      会自动根据请求方法的不同自动匹配对应的方法并执行

CBV源码剖析(重要)

1.从CBV的路由匹配切入
	path('login/',views.MyLoginView.as_view())
    	1.类名点名字(名字的查找问题)
    	2.类店名字并加括号调用(静态方法 、绑定给类的方法)
2. 函数名加括号执行优先级最高 项目一启动就会自动执行as_view方法
	path('login/'.views.view)  # CBV路由本质还是FBV
3.浏览器地址栏访问login路由需要执行view哈桑农户
	1.产生我们自己编写类的对象
	2.对象调用dispatch方法(注意查找顺序)
4.研究父类中的dispatch方法
	获取当前请求方法并转小写 之后利用反射获取类中对应的方法并执行
    
class View:
     @classmethod
     def as_view(cls, **initkwargs):
        def view(request, *args, **kwargs):
            self = cls(**initkwargs)
            return self.dispatch(request, *args, **kwargs)
     def dispatch(self, request, *args, **kwargs):
         handler = getattr(self, request.method.lower())
         return handler(request, *args, **kwargs)

模板层

"""
{{}}:主要与数据值相关
{%%}:主要与逻辑相关

django的模板语法是自己写的 跟jinja2不一样


1.针对需要加括号调用的名字  django模板语法会自动加括号调用你只需要写名字就行
2.模板语法的注释前端浏览器是无法查看的 {##}
"""

1.模板语法传值
	return render(request,'demo02.html',{'n1':name, 'a1':age})  # 传值方式1:精准传值 不浪费资源 针对多资源的传递书写麻烦
	return render(request,'demo02.html',locals())
# 传值方式2: 讲函数名称空间中所有的名字全部传递 名字过多并且不适用的情况下比较浪费资源

2.模板语法传值特性
	1.基本数据类型正常展示
    2.文件对象也可以展示并调用方法
    3.函数名加自动加括号执行并将返回值展示到页面上(不支持额外传参)
    4.类名也会自动加括号调用
    5.对象则不会
    ps:总结针对可以加括号调用的名字模板语法都会自动加括号调用
  
3.模板语法之过滤器(内置函数)

标签:index,return,04,框架,request,视图,django,路由,view
From: https://www.cnblogs.com/wei0919/p/16980581.html

相关文章

  • django框架(3)
    今日内容概要django请求生命周期流程图django路由层反向解析今日内容详细django请求生命周期流程图学习流程 路由层、视图层、模板层、模型层、组件、BBS项目d......
  • django 模板层 待补充
    目录django模板层模板语法之传值操作传值操作模板语法的传值特性过滤器(内置函数)django模板层模板语法之传值操作模板语法{{}}#主要与数据值相关{%%}#主要与......
  • Qt开发Active控件:如何使用ActiveQt Server开发大型软件的主框架(2)
    Qt开发Active控件:如何使用ActiveQtServer开发大型软件的主框架注:本文更多地是带着如何去思考答案,而不是纯粹的放一个答案上来,如果你需要直接看到完整的答案,请直接看实例......
  • django之视图层
    django之视图层视图函数结构视图函数的参数与返回值每一个用来处理请求的视图函数,默认都需要一个request形参来接收request对象。每一个用来处理请求的视图函数必须返......
  • django之视图层
    目录django之视图层视图层必会三板斧JsonResponse对象request对象获取文件FBV与CBVCBV源码解析django之视图层视图层必会三板斧用来处理请求的视图函数都必须返回HttpRe......
  • django模板层
    目录django模板层模板语法传值模板语法传值特性模板语法之过滤器(内置函数)django模板层模板语法传值1.精准传值returnrender(request,'01.html',{'a':name,'......
  • django 4 视图层
    今日内容详细目录今日内容详细视图层视图层之三板斧JsonResponse对象视图层之request对象获取文件视图层之FBV与CBVCBV源码剖析模板层模板语法之传值操作模板语法之传值特......
  • Django4
    路由分发1.django是专注于开发应用的,当一个django项目特别庞大的时候,所有的路由与视图函数映射关系全部写在项目名下urls.py(总路由),很明显太冗余也不便于管理,这个时候也......
  • django框架(部分讲解)
    路由分发django每个应用都可以有自己独立的路由层、静态文件、模板层。基于该特性多人开发项目就可以完全解耦合,之后利用路由分发还可以整合到一起多个应用都有很多路由......
  • python之路48 django 视图层、模板层
    视图层之必会三板斧用来处理请求的视图函数都必须返回HttpResponse对象完全正确classHttpResponse:passreturnHttpResponse()defrender():returnH......