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 ...
随机推荐
- 浏览器登录cookie
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.o ...
- Elasticsearch集群问题,导致主master节点发现不了node节点
个人博客:https://blog.sharedata.info/ 最新需要配置es集群采用5个分片和1个副片,正好是11台机器,而只保留一份备份所以只需要5*2=10台机器方案:1.1台作为mast ...
- Pollard-Rho大整数拆分模板
随机拆分,简直机智. 关于过程可以看http://wenku.baidu.com/link?url=JPlP8watmyGVDdjgiLpcytC0lazh4Leg3s53WIx1_Pp_Y6DJTC ...
- 反素数ant(数学题)
1053: [HAOI2007]反素数ant Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2872 Solved: 1639[Submit][St ...
- SpringMVC拦截器实现用户登录拦截
本例实现登陆时的验证拦截,采用SpringMVC拦截器来实现 当用户点击到网站主页时要进行拦截,用户登录了才能进入网站主页,否则进入登陆页面 核心代码 首先是index.jsp,显示链接 1 < ...
- 注册会计师带你用Python进行探索性风险分析(一)
https://blog.csdn.net/BF02jgtRS00XKtCx/article/details/78519378
- office2013安装/激活
ed2k://|file|cn_office_professional_plus_2013_x64_dvd_1134006.iso|914106368|E5FBAE9EE9CB35D5E777EA78 ...
- You are using pip version 8.1.2, however version 9.0.1 is available.
[root@localhost ~]# pip install virtualenvmapperCollecting virtualenvmapper Could not find a versio ...
- k近邻算法(k-nearest neighbor,k-NN)
kNN是一种基本分类与回归方法.k-NN的输入为实例的特征向量,对应于特征空间中的点:输出为实例的类别,可以取多类.k近邻实际上利用训练数据集对特征向量空间进行划分,并作为其分类的"模型&q ...
- QT发布的EXE打包压缩成单文件
Enigma virtual box 是免费的软件虚拟化工具,它可以将多个文件封装到您的应用程序主文件,这样您的软件就可以制作成为单文件的绿色软件. enigma virtual box 支持所有类型 ...