django学习笔记(一)视图和url配置
1.开始一个项目:
进入创建的目录,然后:
django-admin startproject myblog
2.启动开发服务器:
python manage.py runserver
注:默认是8000端口,可以改,比如:
python manage.py runserver 8001
3.一个视图就是Python的一个函数。这个函数第一个参数的类型是HttpRequest;它返回一个HttpResponse实例。为了使一个Python的函数成为一个Django可识别的视图,它一般必须满足这两个条件。
4.python中有datetime模块。
Import datetime
now = datetime.datetime.now()
plus=2
new_time=now+datetime.timedelta(hours=plus)
5.可以用django出错页来帮助调试
def current_time(request, offset):
now = datetime.datetime.now()
try:
offset = int(offset)
except ValueError:
raise Http404()
assert False
new_time = now + datetime.timedelta(hours=offset)
html = "<html><body>After %s hours,it is %s.</body></html>" % (offset, new_time)
return HttpResponse(html)
这样比用中途print输出变量的调试方法更好一些,因为django出错页显示的信息非常全。
6.
from views import *
这里*的用法是将views里的东西全部导入。
7.url中可以传入一个包含模块名和函数名的字符串,而不是函数对象本身。这样就不必导入相应的视图函数了。Django 会在第一次需要它时根据字符串所描述的视图函数的名字和路径,导入合适的视图函数。
# -*- coding:utf-8 -*-
from django.conf.urls import patterns, url urlpatterns = patterns('',
url(r'^hello$', 'myblog.views.hello'),
url(r'^time/plus/(\d{1,2})/$', 'myblog.views.current_time'),
)
当使这个技术时,可以采用更简化的方式:提取出一个公共视图前缀放在patterns的第一个参数里:
# -*- coding:utf-8 -*-
from django.conf.urls import patterns, url urlpatterns = patterns('myblog.views',
url(r'^hello$', 'hello'),
url(r'^time/plus/(\d{1,2})/$', 'current_time'),
)
8.在实践中,如果使用字符串技术,特别是当 URLconf 中没有一个公共前缀时,最终可能混合视图。 然而,仍然可以利用视图前缀的简便方式来减少重复。 只要增加多个 patterns() 对象,这些对象是可相加的。整个框架关注的是存在一个名为 urlpatterns 的模块级别的变量。
urlpatterns = patterns('mysite.views',
(r'^hello/$', 'hello'),
(r'^time/$', 'current_datetime'),
(r'^time/plus/(\d{1,2})/$', 'hours_ahead'),
) urlpatterns += patterns('weblog.views',
(r'^tag/(\w+)/$', 'tag'),
)
9.使用命名的正则表达式组时值是以关键字参数的方式传递给视图函数的。无命名组时值是以位置参数的方式传递给视图函数的。
from django.conf.urls.defaults import *
from mysite import views urlpatterns = patterns('',
(r'^articles/(\d{4})/$', views.year_archive),
(r'^articles/(\d{4})/(\d{2})/$', views.month_archive),
)
不用命名组,这就相当于这样的函数调用:
month_archive(request, '', '')
from django.conf.urls.defaults import *
from mysite import views urlpatterns = patterns('',
(r'^articles/(?P<year>\d{4})/$', views.year_archive),
(r'^articles/(?P<year>\d{4})/(?P<month>\d{2})/$', views.month_archive),
)
带了命名组,就相当于这样:
month_archive(request, year='', month='')
同一url中最好不要混用命名组和非命名组
如果有任何命名的组,Django会忽略非命名组而直接使用命名组。
否则,Django会把所有非命名组以位置参数的形式传递。
- 在以上的两种情况,Django同时会以关键字参数的方式传递一些额外参数。
10.视图函数可以设置默认的参数值,如果没有从url中传递过来该参数值,就使用默认的参数值:
def my_view(request, template_name='mysite/my_view.html'):
var = do_something()
return render_to_response(template_name, {'var': var})
11.URLconf是自顶向下顺序解析的。
12.每个被捕获的参数将被作为纯Python字符串来发送,而不管正则表达式中的格式。 举个例子,在这行URLConf中
(r'^articles/(?P<year>\d{4})/$', views.year_archive),
尽管 \d{4} 将只匹配整数的字符串,但是参数 year 是作为字符串传至 views.year_archive() 的,而不是整型。
所以在视图函数中要注意类型转换,否则会出现TypeError错误。
13. URLconf里面的每一个模式都可以包含第三个数据: 一个关键字参数的字典。如果有字典传参数值,视图函数以字典里的值为准,不会管正则表达式里传来的值。(所以该变量有字典传值的时候就不要在正则表达式里传值了)
例:
# urls.py from django.conf.urls.defaults import *
from mysite import views urlpatterns = patterns('',
(r'^foo/$', views.foobar_view, {'template_name': 'template1.html'}),
(r'^bar/$', views.foobar_view, {'template_name': 'template2.html'}),
) # views.py from django.shortcuts import render_to_response
from mysite.models import MyModel def foobar_view(request, template_name):
m_list = MyModel.objects.filter(is_new=True)
return render_to_response(template_name, {'m_list': m_list})
14.在任何时候,你的URLconf都可以包含其他URLconf模块。 对于根目录是基于一系列URL的站点来说,这是必要的。
urlpatterns = patterns('',
(r'^weblog/', include('mysite.blog.urls')),
(r'^photos/', include('mysite.photos.urls')),
(r'^about/$', 'mysite.views.about'),
)
例子中的指向 include() 的正则表达式并不包含一个 $ (字符串结尾匹配符),但是包含了一个斜杆。 每当Django遇到 include() 时,它将截断匹配的URL,并把剩余的字符串发往包含的URLconf作进一步处理。
url中正则表达式里的参数值或者字典型参数值会传递给被包含的URLconf中,并且这个被捕获的参数 总是 传递到被包含的URLconf中的 每一 行,不管那些行对应的视图是否需要这些参数。 比如,下面两种写法效果是一样的:
# urls.py from django.conf.urls.defaults import * urlpatterns = patterns('',
(r'^blog/', include('inner'), {'blogid': 3}),
) # inner.py from django.conf.urls.defaults import * urlpatterns = patterns('',
(r'^archive/$', 'mysite.views.archive'),
(r'^about/$', 'mysite.views.about'),
(r'^rss/$', 'mysite.views.rss'),
)
# urls.py from django.conf.urls.defaults import * urlpatterns = patterns('',
(r'^blog/', include('inner')),
) # inner.py from django.conf.urls.defaults import * urlpatterns = patterns('',
(r'^archive/$', 'mysite.views.archive', {'blogid': 3}),
(r'^about/$', 'mysite.views.about', {'blogid': 3}),
(r'^rss/$', 'mysite.views.rss', {'blogid': 3}),
)
django学习笔记(一)视图和url配置的更多相关文章
- Django笔记 —— 高级视图和URL配置
最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...
- Django 学习笔记(六)MySQL配置
环境:Ubuntu16.4 工具:Python3.5 一.安装MySQL数据库 终端命令: sudo apt-get install mysql-server sudo apt-get install ...
- Django学习笔记之视图高级-HTTP请求与响应
Django限制请求method 常用的请求method GET请求 GET请求一般用来向服务器索取数据,但不会向服务器提交数据,不会对服务器的状态进行更改.比如向服务器获取某篇文章的详情. POST ...
- Django学习笔记(二)URL编写规则
先在根目录以及每个app内添加一个空白的urls.py(此处根目录指项目同名文件夹内).程序收到用户请求时,先在根目录的urls.py查找该URL属于哪个app,再从app的urls.py找到具体的U ...
- python之Django学习笔记(三)---URL调度/URL路由
在django中,用户发起url请求消息首先到工程的urls.py中查找是否有匹配的url路径 刚创建好的工程中urls.py只有下面几行代码: from django.contrib import ...
- Django学习笔记之视图高级-CSV文件生成
生成CSV文件 有时候我们做的网站,需要将一些数据,生成有一个CSV文件给浏览器,并且是作为附件的形式下载下来.以下将讲解如何生成CSV文件. 生成小的CSV文件 这里将用一个生成小的CSV文件为例. ...
- Django学习笔记之视图高级-类视图
类视图 在写视图的时候,Django除了使用函数作为视图,也可以使用类作为视图.使用类视图可以使用类的一些特性,比如继承等. View django.views.generic.base.View是主 ...
- Django学习笔记之视图高级-错误处理
错误处理 在一些网站开发中.经常会需要捕获一些错误,然后将这些错误返回比较优美的界面,或者是将这个错误的请求做一些日志保存.那么我们本节就来讲讲如何实现. 常见的错误码 404:服务器没有指定的url ...
- Django 学习笔记1-- URLconf
今天好像巴黎有点乱,希望明天太阳还会照常升起. 简介 Django 是一个由 Python 编写.开源并采用经典的 MVC 设计模式的 Web Full Stack 应用框架. 在 Django 中, ...
- Django 学习笔记(五)模板标签
关于Django模板标签官方网址https://docs.djangoproject.com/en/1.11/ref/templates/builtins/ 1.IF标签 Hello World/vi ...
随机推荐
- hdu3068 最长回文(manacher 算法)
题意: 给定字符串.求字符串中的最长回文序列 解题思路: manacher 算法 时间复杂度:O(N) 代码: #include <cstdio> #include <cstring ...
- C语言基础知识【数据类型】
C 数据类型1.在 C 语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统.变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式.2.C 中的类型可分为以下几种:序号 类 ...
- 逻辑英语 第四季 Speaking and Listening
1. 发音的变革 背字典:牛津双解/朗文英汉 a. 如何一分钟变伦敦腔 发音有两种:伦敦腔/其他 生理分析: ① 后置发音:瞬间华丽变声第一步 东方人靠嘴巴发音: 西方人用胸腔发音[有共鸣] 方法1: ...
- Count(二维树状数组)
[bzoj1452][JSOI2009]Count Description Input Output Sample Input Sample Output 12 HINT 题解:对于每一个颜色建一 ...
- 论JavaWeb前后端分离放弃jsp
1.静态资源使用Nginx反向代理Tomcat,Tomcat挂了网站仍可访问.2.静态与后端服务器分离,提升性能.3.大并发情况下,可同时扩展前后端服务器.4.接口可复用至App相关服务.5.网站热部 ...
- ASP-AJAX-分页格式
HTML: <html> <head> <title>Mazey</title> <meta name="description&quo ...
- 在Ubuntu安装go编译环境
在Ubuntu安装go编译环境 好记性不如烂笔头,所以趁热打铁记录下golang编译环境的安装过程. 首先下载一些依赖包: sudo apt-get install bison ed gawk gcc ...
- 2django 视图与网址进阶
一.在网页中做加减法 采用/add/?a=11&b=22这样get方法进行 django-admin.py startproject zqxt_views cd zqxt_views pyth ...
- Python:笔记(2)——函数与模块
Python:笔记(2)——函数与模块 Python函数 关于函数 1.我们可以使用Help来查看函数的帮助信息 2.调用函数的时候,如果传入的参数数量或者类型不符合均会报错. 3.函数名其实就是一个 ...
- 运用starling开发的手游FlappyBird
最近想向游戏方面发展,于是用starling做了一个简易版的FlappyBird,纯AS3开发,权当是技术学习.在发布之后才明白要发布一个没有版权的app是有多困难,审核了N遍之后终于通过审核,下面发 ...