您的位置:首页 > 编程语言 > Python开发

Django---强大的Python Web框架

2015-01-08 23:52 441 查看
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, 非常优雅地呈现出来.

4, 模板template

模板目录下包含的是所有的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的其他非常有用的模块.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: