python学习之Django—url用法(后续继续补充)

初学Django

搭建环境

  • 跟着视频在cmd中操作了半天,最终还是采用了pycharm自动生成的虚拟环境,但是此处保留两个疑问,自动创建的django的版本是多少呢?怎样就可以自己决定版本号呢?
  • 因为学习只停留在自我学习中,不会出现不兼容的问题,如果出现再寻找答案(后续出现问题时补充)

创建app

  • 在cmd中找到当前项目的文件夹 使用python manage.py startapp [名称]来快速的创建一个app模板

图示即为创建成功

debug模式

  • settings有debug模式,在开发时可以使用用来了解程序的错误,但是在投入线上的时候切记不可将该模式打开.
    在这里插入图片描述

url

1)url映射:
  • 为什么在urls.py文件中寻找映射?
    因为在‘settings.py文件中配置 了‘ROOT_URLCONF’为‘urls.py’`
 ROOT_URLCONF = 'Django_let04.urls'`
url传递参数:
  • a.在url中使用变量的方式传递参数使用<参数name>且可以传递多个参数
def book_detail(request,book_id,category_id):
    # 可以从数据库中根据book_id提取这个图书的信息
    text = "你获取的图书id是:%s,图书分类是:%s" % (book_id,category_id)
    return HttpResponse(text)
   path('book/detail/<book_id>/<category_id>/', views.book_detail),

表现形式如下:
在这里插入图片描述

  • b.在url中使用查询字符串的形式,不需要传递参数只需要在视图函数中使用request.GET.get( 名称)即可,且因为使用的是GET请求是一个类似字典的类型
    def author_detail(request):
    	author_id = request.GET.get('id')
   		text = "作者的id是:%s" % author_id
    	return HttpResponse(text)
     path('book/author/',views.author_detail),

表现形式如下:
在这里插入图片描述

django会内置url转换器

  • 在 ‘converters.py’ 下django内置了四种url转换器
    DEFAULT_CONVERTERS = {
    'int': IntConverter(),# 一个或多个数字
    'path': PathConverter(),# 所有的字符全部满足包括/
    'slug': SlugConverter(),# 英文中横杠,英文字符数字和下划才满足
    'str': StringConverter(),# 除了斜杠所有的字符
    'uuid': UUIDConverter(),# 只有满足uuid.uuid4()的返回字符
}
  • 且在没有写任何转换器情况下默认为的str
   path('book/detail/<:book_id>/<str:category_id>/', views.book_detail),
使用include将app模块化:
  • 主urls文件会自动拼接urls.py文件的不要多加‘/’
# 注意include内的book.urls在当前项目的路径下
from django.urls import path,include
urlpatterns = [
 path('admin/', admin.site.urls),
 path('book/',include('book.urls')),
]

url命名,反转

  • 在path函数中传递name参数即可指定名字,这时只需要更改urls文件中path中的url即可完成统一的更改
path('signin/',views.login,name='login'),

,并且要在views文件中完成url的反转

     return redirect(reverse('login'))

reverse中可以传递kwargs的参数

    return redirect(reverse('cms1:login',kwargs={"book_id":1,"category_id":2}))
  • 在多个app中间可能会出现重复的现象这时应该采用应用命名空间用来区分,命名规则:在app的urls.py中命名app_name的变量
 app_name = 'front'
  • redirect为跳转,revers为反转均在django.shortcuts中
return redirect(reverse('front:login'))

应用命名空间和实例命名空间的区别

应用命名空间也叫app命名空间
一个app可以由多个url进行映射,为了避免发生混淆的问题要在inclued中传递namepace参数

urlpatterns = [
 path('',include('front.urls')),
 path('cms1/',include('cms.urls',namespace='cms1')),
 path('cms2/',include('cms.urls',namespace='cms2')),
]

以后在做反转的时候要根据实例命名空间来指定具体的url

     current_namespace = request.resolver_match.namespace
     return redirect('%s:login' % current_namespace)

include 函数

1.include(module,namespace=None):
**module为url字符串
*namespace 为实例命名空间,使用时需要在子url中写变量app_name

path('cms2/',include('cms.urls',namespace='cms2')),

2.也可向include中传递元组这样即不需要写实例命名空间

 path('cms/',include(('cms.urls','cms'))),

re_path函数

re_path和path使用规则相同但是re_path可以使用正则表达式来写功能更加强大,并且在正则表达式中定义变量需要用?P<参数名字>并在后面添加正则表达式的规则
!!!!如果不是特别要求尽量用path

re_path(r"^list/(?P<year>\d{4})/$",views.article_list),
发布了3 篇原创文章 · 获赞 0 · 访问量 162

猜你喜欢

转载自blog.csdn.net/BINGYiii/article/details/102691261
今日推荐