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 一 前戏 我们在前面的课程中已经学会了 ...
随机推荐
- cocos2dx粒子系统的简单使用
cocos2dx自带的几种封装好的粒子系统,下面做个简单使用演示. ParticleFire 火焰粒子系统 ParticleFireworks 烟花粒子系统 ParticleSun 太阳粒子系统 Pa ...
- python 2
1. 格式化输出 %s 可以代替str %d 可以代替int %f 可以代替浮点数( float ) 格式: Name = input('你的名字:') Age = int(input('你的年龄: ...
- addEventListener以及滑轮滑动事件的应用
addEventListener用于向元素添加事件,而其适用于较新版的IE浏览器(如IE9),对于IE6/7/8来说,应该用attachEvent 下面的代码即为向<img>元素添加事件 ...
- vsftpd 新增虚拟用户
接手公司linux服务器,已经用了vsftpd服务,需要增加新用户. vsftpd的配置文件在/etc/vsftpd.其中 编辑virtusers, 添加一个用户名和密码,奇行为用户名,偶行为密码 在 ...
- Eclipse配置Python的IDE
我第一个用来实际应用的编程语言是Java,于是对Eclipse情有独钟.但是自从上手了Notepad++后,使用Eclipse的机会越来越少. 最近开始学习Python,因为对Python不太熟悉,有 ...
- 在他机上还原DB2的备份
在服务器获取得到db2的备份文件,拷贝到d盘db2_backup目录下面 在windows下的时间戳标记为时间目录名+文件名.001前面的 "2014022\0001006.001" ...
- phpwind v9存在命令执行漏洞(登陆后台)
已知漏洞:https://www.seebug.org/vuldb/ssvid-94465 phpwind v9最新版存在命令执行漏洞(登陆后台) Phpwind_v9.0.2(最新版),phpwin ...
- iOS 解压Assets.car文件
查看Assets.xcassets打包ipa之后Assets.car的图片资源 不经常使用 记录一份:原文地址http://www.jianshu.com/p/a5dd75102467 cartool ...
- 简谈OSI七层模型(网络层)
七层模型,亦称OSI(Open System Interconnection)参考模型,是参考模型是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标准体系. 它是一个七层的.抽象的模型 ...
- Spark+Scalar+Mysql
包:mysql-connector-java-5.1.39-bin.jar 平台:Win8.1 环境:MyEclipse2015 hadoop-2.7.3.tar.gz + winutils.exe ...