十一、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创造梦想。