• URL简单梳理


    # DEBUG模式

    1. 开启debug模式后,修改项目代码时按下ctrl+s可重启项目;
    2. 项目中出现bug时,浏览器与控制台会打印错误信息;
    3. 在生产环境中禁止开启DEBUG模式,有很大的安全隐患;
    4. 将DEBUG设置为False时,必须设置ALLOWED_HOSTS
      •  ALLOWED_HOSTS :用来设置以后只能通过这个变量中的IP或域名来进行访问

    视图函数

    1. 第一个参数必须是 request ; book_id 后可添加默认参数。
    2. 返回值必须是 ‘django.http.response.HttpResponse’ 的子类对象
       1 #(app)front中views.py
       2 from django.http import HttpResponse
       3 
       4 def index(request):
       5     return HttpResponse('网站首页')
       6 
       7 def books(requeset,book_id):
       8     text = '图书的ID是:%s' % book_id
       9     return HttpResponse(text)
      10 
      11 #项目urls.py
      12 from django.urls import path
      13 from front import views
      14 
      15 urlpatterns = [
      16     #http://127.0.0.1:8000/
      17     path('',views.index),
      18     #http://127.0.0.1:8000/book/1
      19     path('book/<book_id>/',views.books)
      20 ]

    urls模块化

    1. 每个App的 urls 都放到自己的App进行管理,在App中新建一个 urls.py 文件来存储所有和这个App相关的 子url ,然后在项目的主 urls.py 文件下使用 include 来包含各个App的 urls.py 文件,如:
      1 #项目urls.py
      2 '''
      3 urlpatterns = [
      4     path('book/',include('book.urls'))
      5 ]
      6 '''  #book.urls为应用程序book的urls.py文件
    2. ‘App’的 urls.py 中,所有的url匹配也要放在变量 urlpatterns 中,否则找不到;
      1 #App的urls.py
      2 '''
      3 urlpatterns = [
      4     path('/detail/<book_id>/',views.book_detail)
      5 ]
      6 '''
    3. 项目的‘url’会根据 urls.py 和App中的 urls.py 进行拼接,注意不能多加斜杆。(得到的URL为:http://.../book/detail/1)

    url命名

    1. 为App的‘ url ’命名,防止后期‘url’经常变动。后期反转时使用 name 定义的url名字。前面显示的 login 可变动;
      1  #app的urls.py
      2 '''
      3 path('login/',views.login,name='login')
      4 '''
    2. 存在多个App时,为防止同名的‘url’产生混淆,使用 ‘命名空间 ’app_name 来进行区分;
      1 #App的urls.py文件
      2 '''
      3 app_name = 'front’  #app的名称
      4 
      5 urlpatterns = [
      6     path('login/',views.login,name='login')
      7 ]
      8 '''

      反转时使用 命名空间:url名称 进行反转

      1 app的urls.py文件
      2 '''
      3 return redirect(reverse(‘front:login’))   #反转到front应用程序的url页面(name=‘login’的值)。
      4 '''

    # 应用(app)命名空间与实例命名空间:

    1. 一个App可使用多个URL实例进行映射,所以使用命名空间时容易发生混淆;使用 实例命名空间‘namespace’ 来解决该问题
      1 #项目urls.py
      2 '''
      3     path('login1/',include('front.urls',namespace='login1'))
      4     path('login2/',include('front.urls',namespace='login2'))
      5 '''
    2. 反转时使用实例命名空间指定具体的url;
       1 #应用程序urls.py
       2 '''
       3 def idnex(request):
       4     username = request.GET.get('username')
       5     if username:
       6         return HttpResponse('front首页')
       7     else:
       8         #获取当前命名空间
       9         current_namespace = request.resolver_match.namespace
      10         return redirect(reverse('%s:login' % current_namespace))
      11 '''

    # include()函数:

    1. include(module,namespace=None)
      • module:子 url 的模块字符串;
      • namespace:指定实例命名空间时必须先指定应用命名空间app_name;
    2. include((pattern_list,app_namespace),namespace=None)
      • 函数的第一个参数可以为一个字符串或者一个元组,为元组时第一个参数为App的 url.py 模块的字符串,第二个参数为应用命名空间;
        1 ''' 
        2 path(('login/',include('front.urls','login'),namespace='book'))
        3 '''
    3.  include(pattern_list) :列表中装 path 或 re_path 。
      1 '''
      2 path('movies/',include([
      3     path(' ',views.movie),
      4     path('list/',views.movie_list),
      5 ]))
      6 '''

    # re_path

    1. 作用比 ‘path’ 强大,写 url 时可使用正则表达式;(无特殊情况时建议使用:path)
    2. 写正则表达式时使用原生字符串,即以 ‘r’ 开头的字符串;
    3. 正则表达式使用圆括号定义变量,参数有名字时使用 ?P<参数名字> ,然后在后面添加正则表达式的规则。
      1 '''
      2 re_path(r"^list/(?P<year>d{4}/$",views.book_list)
      3 '''

    # reverse函数

    1. 在反转 ur l时,如需添加参数,可传递 kwargs 参数到reverse函数中
      1 #应用urls.py
      2 '''
      3 return redirect(reverse('book',kwargs={'book_id':1,'page':2}))
      4 '''
    2. 如需添加字符串的参数,则必须手动进行拼接
      1 #在没输入关键参数时自动跳转到登录页面,next告诉下一步跳转的位置
      2 '''
      3 return redirect(reverse('login') + "?next=/")
      4 '''
      5 #类似于知乎的首页登录跳转
      6 #知乎网站:https://www.zhihu.com/signup?next=%2F    (%2F = /)
      7 #进入时自动跳转到 signup 的url登录页面,后面告知下一步跳转到首页
  • 相关阅读:
    【Python】【Nodejs】下载单张图片到本地,Python和Nodejs的比较
    【pyhon】nvshens图片批量下载爬虫1.01
    【pyhon】Python里的字符串查找函数find和java,js里的indexOf相似,找到返回序号,找不到返回-1
    【pyhon】nvshens图片批量下载爬虫
    【python】下载网络文件到本地
    【python】列出http://www.cnblogs.com/xiandedanteng中所有博文的标题
    【python】列出http://www.cnblogs.com/xiandedanteng/p/中的标题
    【python】如何安装requests
    【python】如何安装BeautifulSoup4
    day16_ajax学习笔记
  • 原文地址:https://www.cnblogs.com/liqiongming/p/10289885.html
Copyright © 2020-2023  润新知