视图与网址
操作文件:urls.py、views.py
urls.py
作用:用于处理前台的链接(如前台访问:127.0.0.1:8080/index/1212/21212),其实永远访问的是同一个文件,至于结果则是通过urls处理,调用不同views中的不同函数,当然这些函数可以在urls中指定。
主要格式:
1.7:url(r
'^add/$'
,
'calc.views.add'
, name
=
'add'
)
,
1.8:
url(r
'^add/$'
, views.add, name
=
'add'
),
2.0:
path(
'add/'
, views.add, name
=
'add'
),
注意:1.8和2.0需要将views导入到urls中,如 from
app
import
views
额外:可以在app中新建urls,通过include函数(2.0:from
django.urls
import
include)使其有效(path('app/', include('app.urls')),)
值得一提的是,每个路由都有一个name(如上:name="add")可写可不写,这里虽不是必须但也极其重要,他是前台链接的别名,即模板中可以使用这个name的值作为路由,需要和{% url %}一起使用。这样写的好处是,代码可维护性很高。
views.py
上面提到需要在urls中引入views模块,如:views.add,其实是在调用views中的add方法,这个方法很特殊,必须至少一个参数,而第一个参数作为数据请求的句柄,也就是request,在里面可以获取前端发来的请求,而且必须返回一个HttpResponse对象。
作用:用于处理请求、数据库交互、模板调用等(内容很多)。
调用模板(templates): 在views 的函数中最后加上return
render(request,
'home.html'
),
home.html即为模板名称,相应的在tempalates中必须有home.html文件,并且需要设置settings.py中的TEMPLATES变量,设置DIRS:'DIRS': [os.path.join(BASE_DIR,'Templates')],
关于FBV与CBV
FBV:f即为function
通过在views.py文件中(其他文件也行,只要urls.py文件能访问并调用该函数,且最终return HttpResponse(),即可)定义函数,(如def index(request):),而在urls.py中可通过
path(
'index/'
, views.index, name
=
'index'
)调用index方法,这就是FBV。
那么CBV又是什么呢?
C即为class,通过类调用,这个类是一个很特殊的类。
1、需要继承View类
views.py--------------------------------------------------------------- from django.views.import View class A(View): def get(self,request): return HttpResponse() def post(self,request): return HttpResponse() urls.py------------------------------------------------------------------ path('A/', views.A.as_view()), #注意,是views.A.as_view() #解释如下: 通过views.A.as_view(),django会根据method的值会自动调用get或者post,当然还有其他方法,一共八种,当然from表单只能使用get或者post
CBV扩展
django是如何调用get和post方法的呢?
其实是通过Views下的dispatch方法来调用的。
因此,重写dispath方法,来额外编写在客户端请求get或者post之前,需要做的工作。比如:用户验证等
from django.views.import View class A(View): def get(self,request): return HttpResponse() def post(self,request): return HttpResponse() def dispatch(self,request,*args,**kwargs): result = super(A,self).dispatch(request,*args,**kwargs) #在这里编写自己的判断逻辑,比如:用户登录验证等内容 return result