zoukankan      html  css  js  c++  java
  • django-3-视图(views.py)与网址(urls.py)

    视图与网址

    操作文件: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

     

  • 相关阅读:
    深入学习图数据库语言Gremlin 系列文章链接汇总
    HugeGraph入门
    Connection 'ens33' is not available on device ens33 because device is strictly unmanaged
    正则里的\s和s有什么区别?
    LXMERT: Learning Cross-Modality Encoder Representations from Transformers
    Pixel-BERT: Aligning Image Pixels with Text by Deep Multi-Modal Transformers
    在vue中使用jsx语法
    JavaScript数据结构和算法
    如何用智能手机或PAD观看笔记本电脑的视频?
    linux shell和windows bat编写
  • 原文地址:https://www.cnblogs.com/hardykay/p/9956274.html
Copyright © 2011-2022 走看看