视图与网址

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

 

django-3-视图(views.py)与网址(urls.py)的更多相关文章

  1. Django框架——基础之路由系统(urls.py)

    1.URL路由系统前言 URL是Web服务的入口,用户通过浏览器发送过来的任何请求,都是发送到一个指定的URL地址,然后被响应. 在Django项目中编写路由,就是向外暴露我们接收哪些URL的请求,除 ...

  2. Django框架——基础之路由系统(urls.py)11111111

    1.URL路由系统前言 URL是Web服务的入口,用户通过浏览器发送过来的任何请求,都是发送到一个指定的URL地址,然后被响应. 在Django项目中编写路由,就是向外暴露我们接收哪些URL的请求,除 ...

  3. Django:视图views(三)

    写一下Cookie.重定向.Session Cookie 测试代码,承接前面的代码: 路由: booktest/urls.py urlpatterns = [ url('^$',views.index ...

  4. Django:视图views(二)

    把request对象和response对象原理流程写一下 request对象 服务器端接收到http协议的请求,会根据报文信息构建HttpRequest对象 通过第一个参数,把该对象传递给视图函数 R ...

  5. Django:视图views(一)

    1.环境搭建 在django中,视图负责与web请求进行交互 视图本质上是一个Python函数,定义在booktest/views.py.通过django1/urls.py路由到该视图中. 首先经过创 ...

  6. Django之视图Views

    视图 视图接受Web请求并且返回Web响应 视图就是一个python函数,被定义在views.py中 响应可以是一张网页的HTML内容,一个重定向,一个404错误等等 响应处理过程如下图: URLco ...

  7. Django (六) 视图 views

    views 1. 视图及HttpRequest 和HttpResponse Django中的视图主要用来接受Web请求,并做出响应. 视图的本质就是一个Python中的函数 视图的响应分为两大类 1) ...

  8. python django url直接访问txt文件。urls.py路由直接指向txt文件

    from django.views.generic import TemplateView urlpatterns = [ url(r'^test/',TemplateView.as_view(tem ...

  9. Django入门三之urls.py重构及参数传递

    1. 内部重构 2. 外部重构 website/blog/urls.py website/website/urls.py 3. 两种参数处理方式 -1. blog/index/?id=1234& ...

  10. python框架之Django(4)-视图&路由

    视图 负责接收请求和返回响应 FBV和CBV FBV FBV(function base views) 就是在视图里使用函数处理请求. from django.conf.urls import url ...

随机推荐

  1. python第一部分小结

       1.python的种类                                                                              Cpython: ...

  2. python学习第一天变量命名规范和变量作用

    变量的命名 python中的变量跟其他编程语言变量一样 1,由字母,下划线,数字组成 2,数字不能做变量名开头 3,变量名尽量有意义和短,,也可以驼峰,不要很low ,比如说是 中文,变量名很长 py ...

  3. java NIO socket 通信实例

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/zhuyijian135757/article/details/37672151 java Nio 通 ...

  4. C#设计模式:抽象工厂(Abstract Factory)

    一,抽象工厂模式 using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...

  5. Spring Boot 2 Webflux的全局异常处理

    https://www.jianshu.com/p/6f631f3e00b9 本文首先将会回顾Spring 5之前的SpringMVC异常处理机制,然后主要讲解Spring Boot 2 Webflu ...

  6. 【LeetCode】线段树 segment-tree(共9题)+ 树状数组 binary-indexed-tree(共5题)

    第一部分---线段树:https://leetcode.com/tag/segment-tree/ [218]The Skyline Problem [307]Range Sum Query - Mu ...

  7. java定义类

    package java04; /* * 定义一个类,用来模拟“学生”,其中包含量两个组合部分 * * 格式: * public class ClassName{ * //成员变量 * //成员方法 ...

  8. 清理maven缓存

    原文:https://blog.csdn.net/viplisong/article/details/82963989maven下载失败后会缓存文件,可能导致下次下载失败.通过以下两步清理 1.cd ...

  9. BZOJ2213 & LOJ2161 「POI2011 R2 Day1」Difference 最大子段和

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=2213 https://loj.ac/problem/2161 题解 做一道简单题来放松一下. ...

  10. eval函数让我忧伤

    今天首次接触这个eval函数,让我忧伤了一把.我把当成字符串拼接,结果错得天远地远.大体情况是下面这句代码,一个劲的给我报NameError: name 'qinfeng' is not define ...