DJango 基础 (2)
urls.py路由用法
知识点
url基本概念url格式urls.py的作用url解析过程include的作用kwarg的作用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的地方都需要更改,但是如果取名字了,就不要做任何改动了。
模板渲染方式
模板路径
渲染方式
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_template(template_name,using = 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)的更多相关文章
- Python之路-(js正则表达式、前端页面的模板套用、Django基础)
js正则表达式 前端页面的模板套用 Django基础 js正则表达式: 1.定义正则表达式 /.../ 用于定义正则表达式 /.../g 表示全局匹配 /.../i 表示不区分大小写 /.../m ...
- Django 基础教程
Django 基础教程 这是第一篇 Django 简介 » Django 是由 Python 开发的一个免费的开源网站框架,可以用于快速搭建高性能,优雅的网站! 你一定可以学会,Django 很简单 ...
- python的django基础篇
一.Django基础 Django 是用Python开发的一个免费开源的Web框架,可以用于快速搭建高性能,优雅的网站! Django的特点: 强大的数据库功能:拥有强大的数据库操作接口(QueryS ...
- Python学习(二十六)—— Django基础一
转载自:http://www.cnblogs.com/liwenzhou/p/8258992.html 一.Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的 ...
- Django基础(一)
Django基础(一) 知识预览 Django基本命令 二 路由配置系统(URLconf) 三 编写视图 四 Template 五 数据库与ORM admin的配置 一 什么是web框架? 框架,即f ...
- python3之Django基础篇
一.Django基础 Django 是用Python开发的一个免费开源的Web框架,可以用于快速搭建高性能,优雅的网站! Django的特点: 强大的数据库功能:拥有强大的数据库操作接口(QueryS ...
- DJango 基础 (1)
django基础 知识点: 基本认知 工具准备 新建项目 目录及文件说明 开发服务器 创建视图函数 新建应用(app) 1.基本认知 Django是用Python开发的一个免费开源的Web框架,可以用 ...
- Django基础和基本使用
Django基础 Django是Python下的一款著名的Web框架 框架 任何语言进入到高级部分时,会有认证.session.http.连接数据库等等功能操作,没有框架时需要自己实现 框架 是整个或 ...
- {Django基础十之Form和ModelForm组件}一 Form介绍 二 Form常用字段和插件 三 From所有内置字段 四 字段校验 五 Hook钩子方法 六 进阶补充 七 ModelForm
Django基础十之Form和ModelForm组件 本节目录 一 Form介绍 二 Form常用字段和插件 三 From所有内置字段 四 字段校验 五 Hook钩子方法 六 进阶补充 七 Model ...
- {Django基础九之中间件} 一 前戏 二 中间件介绍 三 自定义中间件 四 中间件的执行流程 五 中间件版登陆认证
Django基础九之中间件 本节目录 一 前戏 二 中间件介绍 三 自定义中间件 四 中间件的执行流程 五 中间件版登陆认证 六 xxx 七 xxx 八 xxx 一 前戏 我们在前面的课程中已经学会了 ...
随机推荐
- CART-GBRT-GBDT
CART:分类回归树 分类树和回归树的区别:分裂节点时使用的节点非纯度量(最小化准则.特征选择)不一样,修剪树的准则不一样 回归树: 节点非纯度量:平方误差和 区域估计值:均值(在给定的划分下,均值带 ...
- Combining Lexical and Grammatical Features to Improve Readability Measures for First and Second Language Texts.-paper
http://www.aclweb.org/anthology/N07-1058 Volume:Human Language Technologies 2007: The Conference of ...
- ue4 C++ 生成并弹出一个菜单
FGlobalSettingModule& GSettingMod = FModuleManager::LoadModuleChecked<FGlobalSettingModule> ...
- php输出数据到csv文件
function export() { $fileName = date('Y-m-d').uniqid().'.csv'; set_time_limit(0); ini_set('memory_li ...
- enumerate 模块
import os list1 = ['a','b','c'] for index,aph in enumerate(list1) #把可遍历对象的数据以及其索引取出分别赋值给index,aph pr ...
- [转]c#快捷键
c#快捷键(成为高手必备) CTRL + SHIFT + B生成解决方案 CTRL + F7 生成编译 CTRL + O 打开文件 CTRL + SHIFT + O打开项目 CTRL + SHIFT ...
- C语言小程序:除去字符串中间不需要的字符(从小引发大思考)
#include <stdio.h>#include <conio.h> void fun(char *a, char *h, char *p){ char b[81]; ch ...
- 2013-7-30 802.1X企业级加密
今天做了U9510的企业级加密标杆测试,写了企业级加密标杆设备的操作指南.最后做到server 2003却出了问题,peap能关联,但是TLS怎么都关联不上.用adb shell查看logcat日志, ...
- 树莓派apt-get The value '\stable' is invalid for APT 错误
对apt-get进行任何操作都会报错: pi@raspberrypi:~ $ sudo apt-get upgrade Reading package lists... Done E: The val ...
- MYSQL存储过程实现用户登录
MYSQL存储过程实现用户登录 CREATE DEFINER=`root`@`%` PROCEDURE `uc_session_login`( ), ) ) LANGUAGE SQL NOT DETE ...