路由配置

首先,开始路由配置之前,在主目录下创建views.py的视图文件

写入视图函数

from django.http import HttpResponse
def test(request):
    return HttpResponse('Hello World!!!')

一、path

最简单的路由

from django.contrib import admin
from django.urls import path
from .views import * urlpatterns = [ path('admin/', admin.site.urls), path('test/',test), ]

注意:需要导入views.py

 

传参

from django.http import HttpResponse
def test(request,course):
    return HttpResponse('Hello World!!!')

 

urlpatterns = [
    path('admin/', admin.site.urls),
    path('test/<course>/',test),
]

这时浏览器访问的时候url为 127.0.0.1/test/参数 

传不定长参数

如果在主路由设置路由为

path('book/',include('book.urls'),{'swich':'true'}),

那么就可以进行批量传参,子路由访问必须加参数,否则报错

但是有时候需要限制参数的类型

所以在urls.py里可以设置路由为 path('test/int:<course>/',test), 即限制为整数传参

 

python自带的很多默认的转换器

  • str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
  • int,匹配正整数,包含0。
  • slug,匹配字母、数字以及横杠、下划线组成的字符串。
  • uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
  • path,匹配任何非空字符串,包含了路径分隔符

 

二、re_path

需要用到的包 from django.urls import path,re_path 

views.py

def test1(request):
    return HttpResponse('这是用的re_path设置的')
def test2(request,yy):
    print(yy,type(yy))
    return HttpResponse('hello %s'%yy)

urls.py

re_path('^hello/$',views.test1),  #精确查找
re_path('^hello/(?P<yy>[0-9]+)/',views.test2),   #[0-9]表示数字,+表示0-无穷,?p表示命名

re_path只在Django 1.x里使用广泛,在Django 2.x里,path更加简洁高效

 

三、include

include时将路由分配到APP里面

新建APP  python manage.py startapp app名

注册APP,主目录下的settings.py 

INSTALLAPP = {
    'app名',
    }

主目录下的urls.py

from django.contrib import admin
from django.urls import path,include

from .views import *

urlpatterns = [
    path('admin/', admin.site.urls),
    path('book/',include('book.urls')),
]

APP目录下的urls.py

from django.urls import path

from . import views

urlpatterns = [
    path('test/',views.test),
]

APP下的视图函数,函数体  return HttpResponse("Book's test!") 

届时,该视图的URL为 127.0.0.1:8000/book/test 

四、页面重定向

当某一个页面过时不用的时候,再次访问旧路由的时候能够自动跳转到新路由的页面

先写两个视图

def old(request):
    return HttpResponse('This is old web !!')

def new(request):
    return HttpResponse('This is new web !!')

并配置路由

urlpatterns = [
    path('old/',views.old),
    path('new/',views.new),
]

使之能够正常访问

法一 

届时需要做跳转,先导入需要的包 from django.shortcuts import redirect 

def old(request):
    return redirect('/book/new/')
    # return HttpResponse('This is old web !!')
def new(request):
    return HttpResponse('This is new web !!')

然后再次访问旧的路由

会发现当访问旧路由的时候,自动跳转到了新路由

法二

使用name

更改子路由的分配  path('new/',views.new,name = 'news'), 

更改视图函数,需导包  from django.shortcuts import reverse 

def old(request):
    return redirect(reverse('news'))
    # return HttpResponse('This is old web !!')

def new(request):
    return HttpResponse('This is new web !!')

访问旧路由

五、模板渲染

  1. 到主目录下的settings.py下修改TEMPLATES  'DIRS': [os.path.join(BASE_DIR)], 
  2. 创建一个名为templates普通文件夹并注册,在该文件夹路径下创建APP名的文件夹,下级创建HTML文件
  3. 导包  from django.shortcuts import render 
  4. 创建视图  return render(request,'book/index.html') 
  5. 配置路由  path('index/',views.index), 

看看效果

成功渲染!!!

posted @ 2018-12-29 17:48  ChanceySolo  阅读(255)  评论(0编辑  收藏  举报