Django学习笔记----2.URL与视图

URL与视图

  • 视图

    视图一般都写在app的views.py中。并且视图的第一个参数永远是request(一个HttpRequest对象)。这个对象中存储了请求过来的所有的信息,包含携带的参数以及一些头部信息等。在视图中,一般是完成逻辑相关的操作。
    视图的返回结果必须是HttpResponseBase对象或者子类的对象。

  • 映射

    • 视图写完后,要与URL进行映射,也即用户在浏览器中输入什么url的时候可以请求到这个视图函数,在用户输入了一个URL,请求到我们的网站的时候,django会从项目的urls.py文件中寻找对应的视图。

    • 在url.py文件中有一个urlpatterns变量,当请求时会在里面进行匹配,匹配规则要用django.urls.path函数 urlpatterns = [ path('admin/', admin.site.urls) ]

    • 此外有些url中有一些动态调整的参数。这是可以用 == 尖括号 == 的形式来定义一个参数。urlpatterns = [ path('admin/', admin.site.urls)] 。这时在views.py中的视图函数的参数可以加上此参数。 def detail(request, id): pass

    • 也可以通过请求的方式来从浏览器传递参数给服务器。这个时候参数会存在 request中。

    • 在我们的项目中,有很多的app, 可以在每个app中添加一个urls.py ,然后在项目的urls.py中再统一包含这个app的urls。path('',include(''))

    • path函数

      path(route,view,name=None,kwargs=None)

      • route参数
        url的匹配规则。这个参数中可以指定url中需要传递的参数,<类型:id>。
        str 非空的字符串类型。默认 值。
        int 匹配任意的零或者正数的整形。
        uuid 匹配uuid字符串
        path 匹配非空的英文字符串乐也可以包含斜杠。
      • view参数
        可以为一个视图函数或者是类视图.as_view() 或者是 django.urls.include() 函数的返回值。
      • name参数
        这个参数是给这个url取个名字
      • kwargs参数
        用来传递一些额外的参数,这个参数接收一个字典。传到视图函数中的时候,会作为一个关键字传过去。path('blog/',view.year_archive,{'foo':'bar'})
    • re_path函数

      与path函数是一样的,不同的是,第一个参数可以用正则表达式。

    • include函数

      • include(pattern,namespace=None) 直接把其他app的urls包含进来。 path('book/',include('book.urls',namespace=''))
      • include(pattern_list) 可以包含一个列表或者一个元组,元素为一个个path
      • include((pattern,app_namespace),namespace=None) 指明某个app的urls的时候可以指定命名空间。
    • url反转

      如果想要知道一个view对应的url的话,可以通过 reverse函数来实现。
      reverse('book:list') reverse('book:detail',kwargs={'book_id':1})

    • 自定义URL转换器

      # 1、定义一个类
      class FourDigitYearConverter: 
      		# 2、定义一个正则表达式 这个属性是用来保存url转换器规则的正则表达式
      		regex = '[0-9]{4}'
      		# 3、定义to_python方法 这个方法是将url中的值转换一下,然后传给视图函数的
      		def to_python(self, value):
      			return int(value)
      		# 4、定义to_url方法 这个方法是在做url反转的时候,将传进来的参数转换后拼接成一个正确的url。
      		def to_url(self, value):
      			return '%04d' % value 
      #5、注册到django中  
      from django.urls import register_converter
      register_converter(converters.FourdigitYearCpnverter,'yyyy')
      urlpatterns = [
      	path('articles//', views.year_archive),
      ]
      

你可能感兴趣的:(django,django,python,前端,后端)