标签:
Django是Python的一个非常强大的Web应用框架, Django的优点主要在于强大的URL路由管理, APP管理, 后台管理, 全套的解决方案(包括session, cache, auth, 模板等), 以及非常丰富的支持文档. 非常适用于快速开发基于MVC的Web应用.
一个Django项目中可以包含多个APP, 使用django-admin.py startproject myProject和django-admin.py startapp myApp1来分别建立Project和APP. 然后,在该project的目录中执行
python manage.py runserver 0.0.0.0:8003即可启动一个Django的web server, 如下图.
可以看出, 新建APP也可以采用这种方式python manage.py startapp myApp2.
Django项目的层级结构也是非常清晰, 每个APP都有各自的目录.
1, 配置文件
主目录myProject, 也可以算是主APP的目录, 里边的settings.py文件包含了该Django项目的所有设置选项, 如
# 项目包含的APP, 在这里可以非常方便做到APP的管理, 可以称得上是热插拔.
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
)
# ROOT_URLCONF是Django项目的根路由文件, 该文件决定了所有的路由配置规则.
ROOT_URLCONF = 'myProject.urls'
# Template settings, 设置Web前端模板的目录
TEMPLATE_DIRS = (
'myProject/templates',
)
# Static files (CSS, JavaScript, Images)
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static').replace('\\','/'),
)
# Database的设置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mydb1',
'USER': 'mydb1',
'PASSWORD': '123456',
'HOST': '192.168.5.126',
'PORT': 3306,
'OPTIONS': {
'charset': 'utf8',
'use_unicode': True,
},
},
}
以上就是该Django项目的配置文件settings.py的内容.
2, 路由规则
Django采用的路由规则非常优雅, 每个APP都有自己独立的urls.py文件来管理这些规则. 格式如下:
urlpatterns = patterns('',
url(r'^index/$', views.index),
url(r'^result/', include('result.urls')),
)url的规则采用正则表达式来进行匹配, url(r‘^index/$‘, views.index) 表示符合 r‘^index/$‘ 匹配规则的链接, 指向views.py下边的index方法.
url(r‘^result/‘, include(‘result.urls‘)) 表示符合 r‘^result/‘ 匹配规则的链接, 会转而去另一个APP result下的urls.py路由文件中查找. 查找原理同上.
from django.conf.urls import patterns, include, url
urlpatterns = patterns('result.views',
url(r'^queryResults/$', 'queryResults'),
url(r'^moreResults/$', 'moreResults'),
)
3, 视图views
至于路由规则生效的具体细节, 则全包含在文件views.py中. 这里也是MVC框架特点体现得非常明显的地方.from django.shortcuts import render
def index(request):
return render(request, 'index.html')
该index方法, 会从模板目录中找到index.html, 将其渲染到浏览器.
下边的queryResults方法, 可以用于GET请求的链接: 其作用是从数据库中查询结果, 将其返回给浏览器.
def queryResults(request):
'''
@desc: queryResults
'''
if request.method == 'GET':
if request.session.has_key("userid"):
data = ResultSerializer(Result.objects.filter(
user=request.session['userid'])[0:10], many=True).data
data = JSONRenderer().render(data)
return HttpResponse(json.dumps({"status": 0, "data": data}),
content_type="application/json")
else:
return HttpResponse(json.dumps({"status": 1,
"err_msg": "can not find the user info"}),
content_type="application/json")
else:
return HttpResponse(json.dumps({"status": 1,
"err_msg": "It only support HTTP GET method."}),
content_type="application/json")
这样, Web页面上的链接就可以通过urls.py, views.py, 以及Django项目的APP, 非常优雅地呈现出来.模板目录下包含的是所有的html文件. 其中{% load staticfiles %}是Django的语法, 即加载staticfiles目录里的文件.
(staticfiles是settings.py文件中设置的, ‘django.contrib.staticfiles‘, 其实对应于settings.py中的STATICFILES_DIRS变量指向的目录)
{% load staticfiles %}
<!DOCTYPE html>
<html lang="en">
...
</html>static目录中, 用于存放项目所需的css, js等资源文件.
类似的Django语法还有:
{% extends "base.html" %}
{% block content %}
<div id="faq-tab-1" class="tab-pane fade">
{% include "results.html" %}
</div>
{% endblock%}作用是将div制作成一个名字为content的block, 然后在html文件的其他地方可以引用该block. 引用方式为 {% block content %}{% endblock %}.
好了, Django Web框架的基本结构介绍到这里. 欢迎大家指正.
在后续的博客中, 将分别介绍Django的其他非常有用的模块.
标签:
原文地址:http://blog.csdn.net/icetime17/article/details/42506779