首页 > 其他分享 >django路由分发、名称空间、虚拟环境、视图层之FBV与CBV及模板层

django路由分发、名称空间、虚拟环境、视图层之FBV与CBV及模板层

时间:2022-12-13 17:46:18浏览次数:41  
标签:index FBV views 视图 虚拟环境 app01 urls path 路由

目录

路由分发

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

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

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

代码:

创建2个app,分别是app01和app02,并注册到settings.py里面.
app01:
urls.py:
from django.urls import path
from app01 import views
urlpatterns = [
    path('index/',views.index)
]
views.py:
from django.shortcuts import render,HttpResponse

# Create your views here.
def index(request):
    return HttpResponse('from app01 index view')


app02:
urls.py:
from django.urls import path
from app02  import views
urlpatterns = [
    path('index/',views.index)
]
views.py:
from django.shortcuts import render,HttpResponse

# Create your views here.
def index(request):
    return HttpResponse('from app02 index view')

django项目:
urls.py:
from django.urls import path,include

urlpatterns = [
    path('admin/', admin.site.urls),
    #路由分发
    path('app01/',include('app01.urls')),
    path('app02/',include('app02.urls')),
]

验证:
image
image

名称空间

路由分发之后 针对相同的别名能否自动反向解析出不同的应用前缀
	默认情况下是无法直接识别应用前缀的

如果想要正常识别区分有两种方式
	方式1:名称空间
 		总路由
    path('app01/', include(('app01.urls', 'app01'), namespace='app01')),
    path('app02/', include(('app02.urls', 'app02'), namespace='app02')),
    	反向解析(后端views.py)
        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()
return render()

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

JsonResponse对象

from django.http import JsonResponse
# Create your views here.
def index_func(request):
    # 返回给浏览器一个json格式的字符串
    user_dict = {'name':'jason老师','age':18}
	return JsonResponse(user_dict,json_dumps_params={'ensure_ascii':False})
ps:以后写代码很多时候可能需要参考源码及所学知识扩展功能
class JsonResponse(HttpResponse):
	 def __init__(self, data, encoder=DjangoJSONEncoder, safe=True, json_dumps_params=None, **kwargs):
	     data = json.dumps(data, cls=encoder, **json_dumps_params)

JsonResponse主要序列化字典 针对非字典的其它可以被序列化的数据需要修改safe参数为False
代码:
项目urls.py
from app01 import views
 path('index/',views.index_func),

app01.views.py
from django.http import JsonResponse
# Create your views here.
def index_func(request):
    # 返回给浏览器一个json格式的字符串
    user_dict = {'name':'jason老师','age':18}
    # import json  #手动json序列化
    # user_json = json.dumps(user_dict,ensure_ascii=False)
    # return HttpResponse(user_json)
    return JsonResponse(user_dict,json_dumps_params={'ensure_ascii':False})

image
image
image

视图层之request对象获取文件


视图层之FBV与CBV

CBV源码剖析(重点)

模板层

标签:index,FBV,views,视图,虚拟环境,app01,urls,path,路由
From: https://www.cnblogs.com/winter-yu1989/p/16979440.html

相关文章