一、初识Django
自称MTV框架。和传统的MVC大同小异。
M指数据模型(Model),T指模板(Template),用来描述数据的展现。V指的是视图(View),并且,在Django中可以通过URL分发器对URL和View之间的映射进行配置,而View则URL分发器回调启动server
python manage.py runserver
可以更改本地端口:
python manage.py runserver 8080
还可以设置成允许公开的互联网连接
python manage.py runserver 127.0.0.1:8000
这样只要在别人的浏览器中输入你的服务器的IP和端口就可以访问了
http://127.0.0.1:8000
还需要在settings.py中定义模板所在的路径,记住用引号标识路径字符串
Django服务器一般情况下会自动重载你的每一次修改,但对新创建的操作不会重载,所以还是要重启服务器。
(1)Django的简单流程
1. 一个来自/hello/的请求
2. 检查settings.py中ROOT_URL_CONF属性所设定的映射配置信息
3. 找到第一个匹配/hello/的配置
4. 如果找到,就调用相关联的view函数
5. view函数返回HttpResponse对象
6. Django把HttpResponse对象转化成相应的HTTP response,形成网页
URL映射
Django是在urls.py中,把URL访问映射到views.py模块中相应的响应函数。
函数的特点的,第一个参数一定是requrest(HTTPRequest对象),返回要是HttpResponse
至于映射的方式是采用正规表达式。
urlpatterns = patterns('',
('^hello/$', hello),
)
Django对访问的URL地址,首先会去掉8080后面的"/",然后进行URL映射分析。
这里要注意的是尾部的"/",理论上你输入地址时不加上的话,会发生跳转错误,因为
无法映射到这个URL,但Django设置中有一个参数APPEN_SLASH=True的话,Django
会自动帮你加上尾部的"/";当它设置成False时,那就会报错提交报错:URL doesn'tend in a slash and you have APPEND_SLASH set.。
还有要记得一旦设置你自定义气URL映射信息,Django就不会让localhost:8000/这个根路径
返回It works那样的默认信息,根路径的页面也需要你自己设置一下
(r'^/$', your_homepage_view)
当在路径匹配的正则表达式中使用括号,就意味着可以向view函数传入额外的参数。
(r'^/puls/(\d{1,3})$', your_homepage_view)
def your_homepage_view(request, offset):
#offset就是匹配的\d{1,3}的字符串。
二、第一个django程序
1. 创建一个django工程
django-admin.py startproject helloworld
目前windows下我只发现用这样的命令可以成功创建project。。。这样就会在当前目录下创建一个helloworld工程文件夹。
2. 创建views.py文件
在工程文件夹根目录创建views.py文件,其实任意文件名都可以,使用views是为了遵循传统。
在里面输入:
from django.http import HttpResponse
#所有的views函数都需要以request对象作为第一个参数
#它是请求类HttpRequest对象,包含了用户的请求信息。
#可以以http代码为参数进行初始化
def hello(request):
#返回HttpResponse对象
return HttpResponse("<html><body><h1>Hello world</h1></body></html>")
3. 在工程文件夹中自动生成的urls.py中配置路径
需要加入两行
from views import hello
urlpatterns = patterns('',
url(r'^hello/$', hello), #记得输入这个逗号
)
4. 启动服务器,并在浏览器中查看结果
在工程文件夹根目录下输入命令
python manage.py runserver
启动服务器
并在浏览器中输入网址http://localhost:8000/hello/
三、模板使用
模板基本由两个部分组成,一是HTML代码,二是逻辑控制代码。
逻辑控制的实现又基本由三个部分组成:
1. 变量的使用
{{ person_name }} #使用双大括号来引用变量
2. tag的使用
{% if ordered_warranty %} #使用大括号和百分号的组成来表示使用Django提供的
template tag
{% for item in item_list %}
<li>{{ item }}</li>
{% endfor %}
使用python manage.py shell启动python交互式命令行窗口与一般直接启动python自带的
交互式命令行窗口的区别是前者会通过找一个DJANGO_SETTINGS_MODULE环境变量,
告诉Django导入settings.py的配置信息。
template inheritance.
首先,创建base.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<head>
<title>{% block title %}{% endblock %}</title>
</head>
<body>
<h1>My helpful timestamp site</h1>
{% block content %}{% endblock %}
{% block footer %}
<hr>
<p>Thanks for visiting my site.</p>
{% endblock %}
</body>
</html>
我们使用一个新的tag,{% block %}用来告诉template engine,这个部分会被子模板
来实现。如果子模板没有实现这些部分,就会默认使用父模板的代码。
子模板:
{% extends "base.html" %}
{% block title %}The current time{% endblock %}
{% block content %}
<p>It is now {{ current_date }}.</p>
{% endblock %}
只需要先使用{% extends %}继承父模板,再把相应需要实现的部分写上所需要的内容。
{% extends template_name %}也可以使用变量名来实现动态。
模板继承的三层继承策略:
1. 创建一个base.html,用来设置外观
2. 为网站的每一个部分,创建base_SECTION.html,比如base_phote.html, base_forum.html
3. 为每一个页面创建自己的模板。