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 ...
随机推荐
- Rancher探秘一:初识Rancher
前言:最近公司需要导入k8s管理,看了一些rancher相关内容,在此做一记录,rancher系列会根据进展不定期更新. Rancher是什么? Rancher是一个开源的企业级容器管理平台.通过Ra ...
- Unity Editor Inspector编辑模板
效果图: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEdito ...
- Unity导出AssetBundle到指定路径
using System.Collections; using UnityEngine; using UnityEditor; using System.IO; /// <summary> ...
- C++ 错误积累
错误一 VS2012错误:不能在成员函数 的类外部重新声明该函数 解决:检查函数的大括号匹配
- 【BZOJ3720】Gty的妹子树 块状树
[BZOJ3720]Gty的妹子树 我曾在弦歌之中听过你,檀板声碎,半出折子戏.舞榭歌台被风吹去,岁月深处尚有余音一缕……Gty神(xian)犇(chong)从来不缺妹子……他来到了一棵妹子树下,发现 ...
- 多语言中的“默认语言”设置
最近在搞一个多语言的东西,打算如果用户是中文环境就显示中文,其他任何非中文环境就显示英文.换句话说,把默认语言设置成英文. 不过因为VS是中文的,发现即使默认资源文件是英文(AppResource.r ...
- php建立一个空类: stdClass
$pick = new stdClass; $pick->type = 'full'; ;
- 【python】-- 函数非固定参数,返回值(return)
函数非固定参数 1.默认参数: 代码如下: def information_register(name,age,country,sex): print("----注册信息------&quo ...
- ALV 红绿灯编写
[转http://lz357502668.blog.163.com/blog/static/164967432012417102133216/]ALV 指示燈 編寫 1,在內表中申請一個字段. 該字段 ...
- mysql 修改表名的方法:sql语句
在使用mysql时,经常遇到表名不符合规范或标准,但是表里已经有大量的数据了,如何保留数据,只更改表名呢? 可以通过建一个相同的表结构的表,把原来的数据导入到新表中,但是这样视乎很麻烦. 能否简单使用 ...