django框架(2)

十一、url配置

https://www,sougo.com/web?query=

协议 域名(ip地址和端口)路径 参数

自制项目

1.为了后期的导入包适用,将标记目录为来源根。

2.环境不等于虚拟机。在一个环境创建一个文件夹再另一个环境下也可以看到这个文件夹。环境只是不同的解释器

A项目 cd两个模块 --》解释器 --》A 虚拟环境

B项目 de模块 --》解释器 --》B 虚拟环境

3.关闭进程

Ps-ef|grep 8000

​ Kill 进程号

4.只要动过crm项目下的url配置的 127.0.0.1:8000就不能再进去了。

现在CRM新建一个 views.py的文件
from django.http import HttpResponse

#下面的index为项目名可以改
def index(request):
    return HttpResponse("hello world")
    
然后在urls的目录下
from . import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('index/', views.index),
]
此时网页搜索127.0.0.1:8000/index/就可以看到所需要的视图。

1.路由系统(url.py)

URL配置 URLconf python模块 —》是URL路径到视图函数的一个映射

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

  • Route字符串,URL的路径
  • View:视图
  • Kwargs:额外参数,必须为字典
  • Name:

3.传参<>通过捕获参数

def detail(request, id):
    return HttpResponse("{}号学生详情".format(id))
path('index/<id>/', views.index),

但这个时候,你输入任何值都会显示要用路径转换器

4.路径转换器

<转换器:参数名>

  • str:匹配除了"/"以外的非空字符串
  • int:匹配整数
  • uuid:格式化字符串,有破折号小写字母和数字。
def detail(request, id,year,month):
    return HttpResponse("{}号学生详情".format(id))
path('detail/<id>-<int:year>-<int:month>/', views.index)

应为需要保证输入的数字位数,需要正则来控制输入

命名正则表达式分组的语法(?p<组名>正则表达式)

from django.urls import re_path
def detail(request, id,year,month):
    return HttpResponse("{}年{}月{}号学生详情".format(year,month,id))
re_path(r'detail/(?P<year>\d{4})/(?P<month>[0-9]|1[0-2])/(?P<id>\d+)/', views.detail)
]

5.kwargs:额外参数

当我们的kwargs中的key与url捕获的key一致的时候,以kwargs为准。

def student(request,name):
    return HttpResponse("学生:{}".format(name))
path('student/<name>/', views.student,kwargs={'name':'summer'}),

6.url命名:name

from django.shortcuts import redirect
def test1(request):
    return redirect('https://www.baidu.com')
    
def login(request):
    return redirect('/index/')#硬编码
    return redirect('index')#通过name来寻找相应的路径。
    
    
path('test1/', views.test1),
path('login/', views.login),
path('index/guanngtouqiang', views.index, name='index'),

7.包含其他的URL:include

实际开发中,我们的视图都在app中,这时怎么访问app中的views呢?

传值也可以使用固定参数。

from django.urls import path,re_path,include
path('teacher/', include('teacher.urls'), kwargs={'name':'summer'}),
传参会传递到include下面包含的每一条路劲中,要谨慎使用。


def students(request,name):
    return HttpResponse('学生姓名:{}'.format(name))
def detail(request,name='summer'):
    return HttpResponse('{}:成功'.format(name))
    

path('<name>/students/', views.students),

总结:

1.当一个请求过来时,Django会查找我们的根URL配置,再找路由匹配规则。从上往下找,一直找到为止

2.如果路由规则对应的是include,去找这个include包含的urlp配置

3.访问的url由路由规则来决定。

8.补充 App_name

因为有许多的app,因此有许多的app同时存在index或者login,

在app的urls应用下添加app_name = ‘app的name’

如果不设置其他的name那么在login搜索时,只搜索根目录下的index并且如果不命名index将会报错。解决必须加上app_name

def login(request):
    return redirect('student:index')

如果想获取更多有关python的信息,和想玩python制作的小程序,可以关注微信公众号(dreamspy)。我们一起用python改变世界,一起用python创造梦想。
在这里插入图片描述

发布了43 篇原创文章 · 获赞 11 · 访问量 5405

猜你喜欢

转载自blog.csdn.net/jiangSummer/article/details/103390520