urls.py路由用法

知识点

  1. url基本概念

  2. url格式

  3. urls.py的作用

  4. url解析过程

  5. include的作用

  6. kwarg的作用

  7. name的作用

URL概念

URL(Uniform Resoure Locator)统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。

URL格式

http://127.0.0.1:8000/hello/
URL解释:
schema://host[:port#]/path/.../[?query-string][#anchor]
schema:指定使用的协议(例如:http, https, ftp)
host:Http服务器的IP地址或者域名
port:端口号,http默认是80端口
path:访问资源的路径
query-string:发送给http服务器的数据
anchor:锚点

url.py的作用

URL配置(URLconf)就像是Django所支撑网站的目录。它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表。以这样的方式告诉Django,对于那个URL调用那段代码。url的加载就是从配置文件中开始。

url解析过程

Django会从urlpatterns里顺次读取元素,每个元素是方法url调用后返回的结果。
django传给url路由要处理的地址,该地址是被去掉主机地址及之后的一个“/”的剩余部分:
例如: http://127.0.0.1:8000/hello/
经处理后的剩余部分就是:
hello/
然后把该剩余部分与url方法的第一个参数进行正则匹配,如何匹配成功,则执行url的第二个参数指定的方法(该方法一般放在views.py中,主要功能的实现具体业务逻辑)。

url例子

# hello_django/urls.py:
from django.conf.urls import include,url
from django.contrib import admin
from books import views

urlpatterns = [
   url(r'^admin/', admin.site.urls),
   # url(r'^hello/python/$', views.hello_python),
   # url(r'^hello/php/$', views.hello_php),
   # url(r'^hello/([a-z]+)/$',views.hello_course),
   # url(r'^add/(\d+)/(\d+)/$', views.add),
   # url(r'^hello/(?P<name>\w+)/(?P<num>\d+)$',views.hello_django),
]
# books/views.py
from django.http import HttpResponse

def hello_python(request):
   return HttpResponse('Hello python!')

def hello_php(request):
   return HttpResponse('Hello php!')

def hello_course(request, course):
   return HttpResponse('Hello %s' % course)

def add(request,a,b):
   c = int(a)+int(b)
   return HttpResponse(str(c))

def hello_django(request, name, num):
   return HttpResponse('Hello %s %s' % (name, num))

参数捕获:

1、捕获位置参数(可变参数):在url函数中,第一个正则表达式使用()括号进行捕获参数.

2、捕获关键字参数:在url函数中,第一个正则表达式使用(?P<keyword>)进行捕获。

注意事项:

参数类型是字符串类型,所以,如果使用数字类型,需要使用int函数转换成int类型。

include的作用

方便项目管理:
一个project有一个总的urls.py,各个app也可以自己建立自己的urls.py,不过都需要使用include()函数在project的urls.py文件进行注册。
#hello_django/urls.py     主url文件
from django.conf.urls import include,url
from django.contrib import admin
from .import views

urlpatterns = [
   url(r'^admin/', admin.site.urls),
   url(r'^books/',include('books.urls')),
]
#books/urls.py    APP books里面的URL文件
from django.conf.urls import url
from . import views

urlpatterns =[
   url(r'^$',views.index),
   url(r'article/$', views.article),
#book/view.py           APP books里面的view文件
from django.http import HttpResponse
def index(request):
   return HttpResponse('这是首页')
def article(request,):
   return HttpResponse('这是文章的首页')
Include注意事项:
到达django来的时候,已经有域名和反斜杠了,拿本机地址为例,已经有http://127.0.0.1/这个样子了,所以主url中都不需要以/开头。
子url在匹配的时候,其实就是字符串的匹配,一层套一层的。

主Url匹配,开始的地方不需要加反斜杠。
原因是:因为django已经给域名后面加了一个正斜杠,所以不需要再加,否则将匹配不到正确的URL。
主url后面要加正斜杠。
app的url,前面不要加正斜杠。
主url后面不要加$符号,
子app的url,后面要加$符号。

kwarg的作用

传递一个Python 字典作为额外的参数传递给视图函数。django.conf.urls.url() 函数可以接收一个可选的第三个参数,它是一个字典,表示想要传递给视图函数的额外关键字参数。
#hello_django/urls.py     主url文件
from django.conf.urls import include,url
from django.contrib import admin
from .import views

urlpatterns = [
   url(r'^admin/', admin.site.urls),
   url(r'^books/',include('books.urls'),{'switch':'true'}),
]
# book/view.py      APP books里面的view文件
from django.http import HttpResponse
import datetime
def index(request,**arg):
   if arg.get('switch') == 'true':
       print(datetime.datetime.now())
   return HttpResponse('<h1>这是首页</h1>')
URL传递额外参数:
url函数有一个参数叫做kwargs,这个参数可以传递额外的参数到views中,并且必须为字典类型。这在使用include的时候,需要统一给下面的url一些参数的时候,显得尤其有用。

name的作用

给一个匹配的url地址取名字
一般用于模板
也可以使用reverse进行页面重定向
# book/url.py    APP books里面的URL文件
from django.conf.urls import url
from . import views

urlpatterns =[
   url(r'^$',views.index),
   url(r'article/$', views.article,name='books_article'),
   url(r'^(?P<books>\w+)/$',views.book_list,name='books_lists'),
   url(r'^article_new/$', views.article_new,name='books_article_new'),
]
# book/views.py   APP book里面的view文件
from django.shortcuts import render,reverse,redirect
from django.http import HttpResponse
# Create your views here.

def article(request,**kwargs):
   if kwargs.get('switch') == 'true':
               return redirect(reverse('book_article_new'))
   return HttpResponse('这是文章首页')

def article_new(request,**kwargs):
   return HttpResponse('这是新的文章首页')
url有一个name的参数,name参数可以给这个url取一个合适的名字。通过给url取名字,以后在view或者模板中使用这个URL,就只需要通过这个名字就可以了。这样做的原因是防止url的规则更改,会导致其他地方用了这个url的地方都需要更改,但是如果取名字了,就不要做任何改动了。

模板渲染方式

  1. 模板路径

  2. 渲染方式

setting.py中模板路径配置:

TEMPLATES = [
  {
       'BACKEND': 'django.template.backends.django.DjangoTemplates',
       'DIRS': [os.path.join(BASE_DIR, 'templates')],
       'APP_DIRS': True,
       'OPTIONS': {
           'context_processors': [
               'django.template.context_processors.debug',
               'django.template.context_processors.request',
               'django.contrib.auth.context_processors.auth',
               'django.contrib.messages.context_processors.messages',
          ],
      },
  },
]

1.直接将html字符串硬编码HttpResponse

def index_1(request):
   return HttpResponse('<h1>Hello Django World!</h1>')

2.django.template.loader 定义了函数以加载模板。

get_templatetemplate_nameusing = None

该函数使用给定的名称加载模板并返回一个Template 对象.get_template()尝试获取每个模板直到有一个成功满足。

from django.template.loader import get_template
def index_2(request,bn):
   t = get_template('index.html')
   html = t.render({'books_name':bn})
   return HttpResponse(html)

3.使用render进行渲染。

from django.shortcuts import render

def index_3(request,bn):
   return render(request,'index.html',{'booksname':bn})

DJango 基础 (2)的更多相关文章

  1. Python之路-(js正则表达式、前端页面的模板套用、Django基础)

    js正则表达式 前端页面的模板套用 Django基础 js正则表达式: 1.定义正则表达式 /.../  用于定义正则表达式 /.../g 表示全局匹配 /.../i 表示不区分大小写 /.../m ...

  2. Django 基础教程

    Django 基础教程 这是第一篇 Django 简介 »  Django 是由 Python 开发的一个免费的开源网站框架,可以用于快速搭建高性能,优雅的网站! 你一定可以学会,Django 很简单 ...

  3. python的django基础篇

    一.Django基础 Django 是用Python开发的一个免费开源的Web框架,可以用于快速搭建高性能,优雅的网站! Django的特点: 强大的数据库功能:拥有强大的数据库操作接口(QueryS ...

  4. Python学习(二十六)—— Django基础一

    转载自:http://www.cnblogs.com/liwenzhou/p/8258992.html 一.Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的 ...

  5. Django基础(一)

    Django基础(一) 知识预览 Django基本命令 二 路由配置系统(URLconf) 三 编写视图 四 Template 五 数据库与ORM admin的配置 一 什么是web框架? 框架,即f ...

  6. python3之Django基础篇

    一.Django基础 Django 是用Python开发的一个免费开源的Web框架,可以用于快速搭建高性能,优雅的网站! Django的特点: 强大的数据库功能:拥有强大的数据库操作接口(QueryS ...

  7. DJango 基础 (1)

    django基础 知识点: 基本认知 工具准备 新建项目 目录及文件说明 开发服务器 创建视图函数 新建应用(app) 1.基本认知 Django是用Python开发的一个免费开源的Web框架,可以用 ...

  8. Django基础和基本使用

    Django基础 Django是Python下的一款著名的Web框架 框架 任何语言进入到高级部分时,会有认证.session.http.连接数据库等等功能操作,没有框架时需要自己实现 框架 是整个或 ...

  9. {Django基础十之Form和ModelForm组件}一 Form介绍 二 Form常用字段和插件 三 From所有内置字段 四 字段校验 五 Hook钩子方法 六 进阶补充 七 ModelForm

    Django基础十之Form和ModelForm组件 本节目录 一 Form介绍 二 Form常用字段和插件 三 From所有内置字段 四 字段校验 五 Hook钩子方法 六 进阶补充 七 Model ...

  10. {Django基础九之中间件} 一 前戏 二 中间件介绍 三 自定义中间件 四 中间件的执行流程 五 中间件版登陆认证

    Django基础九之中间件 本节目录 一 前戏 二 中间件介绍 三 自定义中间件 四 中间件的执行流程 五 中间件版登陆认证 六 xxx 七 xxx 八 xxx 一 前戏 我们在前面的课程中已经学会了 ...

随机推荐

  1. 学习笔记TF036:实现Bidirectional LSTM Classifier

    双向循环神经网络(Bidirectional Recurrent Neural Networks,Bi-RNN),Schuster.Paliwal,1997年首次提出,和LSTM同年.Bi-RNN,增 ...

  2. 使用 jest 测试 react component 的配置,踩坑。

    首先安装依赖 npm i jest -g npm i jest babel-jest identity-obj-proxy enzyme enzyme-adapter-react-15.4 react ...

  3. 【mongodb】如何在mac上安装mongoDB

    1.登入MongoDB的官网 选择发布的版本 网址:https://www.mongodb.com/download-center/community 2.下载tgz的包,解压缩 3.打开终端,配置环 ...

  4. HttpWebRequest post 请求超时问题

    在使用curl做POST的时候, 当要POST的数据大于1024字节的时候, curl并不会直接就发起POST请求, 而是会分为俩步, 发送一个请求, 包含一个Expect:100-continue, ...

  5. Java高级特性 第1节 集合框架和泛型

    Java中,存储多个同类型的数据,可以用数组来实现,但数组有一些缺陷: 数组长度固定不变,布恩那个很好的适应元素数量动态变化的情况 可以通过数组.length获取数组长度,却无法直接获取数组中实际存储 ...

  6. debian系统下apache2开启ssi功能

    SSI (Server Side Include)的 html 文件扩展名 (.shtml), 通常称为"服务器端嵌入"或者叫"服务器端包含"说白了就是类似其他 ...

  7. redis 延时任务 看一篇成高手系列2

    引言 在开发中,往往会遇到一些关于延时任务的需求.例如 生成订单30分钟未支付,则自动取消 生成订单60秒后,给用户发短信 对上述的任务,我们给一个专业的名字来形容,那就是延时任务.那么这里就会产生一 ...

  8. VUE 进行微信支付,解决 微信支付URL未注册

    使用history方式 比较坑吧就不吐槽了,说下实现方式 需要解决问题: 1.因为我的微信支付授权路由是:m.xxxx.com,this.$router.push('xxx')之后经常出现 [微信支付 ...

  9. VSCode TypeScript开发

    下载VSCode VSCode是我使用过最棒的编辑器没有之一. 创建项目 创建目录 首先我们创建一个项目文件夹,比如叫ts_vscode,然后创建一些主要目录,在VSCode中打开项目 目录结构: t ...

  10. 黄聪:xampp运行MySQL shutdown unexpectedly解决方案

    相信不少喜欢WordPress的朋友和我一样,会用xampp在本地搭建一个网站学习调试,但是在用的过程中也会遇到些麻烦,毕竟我们都是小白,今天就分享一个xampp运行MySQL数据时出现 Error: ...