专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > Go

Django-强大的Python Web框架

发布时间:2011-06-29 18:25:51 文章来源:www.iduyao.cn 采编人员:星星草
Django---强大的Python Web框架

    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的其他非常有用的模块.







友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

  • ModernUI课程:定义一个Logo

    ModernUI教程:定义一个Logo ModernWindow的标题栏包含了一块区域用来显示自定义的窗体Logo: 这个窗体logo通过ModernWindow.LogoD...

  • Django忘记管理员账号和密码的解决方法

    Django忘记管理员账号和密码的解决办法 看着Django的教程学习搭建网站,结果忘记第一次创建的账号和密码了。结果搭建成功以后,一直...

  • GO语言小结(1)——基本知识

    GO语言总结(1)——基本知识 1、注释(与C++一样)   行注释://  块注释:/*   ...  */ 2、标识符   可以这么说,除了数字开头...

  • golang 惯用的文件读取方式

    golang 常用的文件读取方式 Golang 的文件读取方法很多,刚上手时不知道怎么选择,所以贴在此处便后速查。 一次性读取 小文件推荐一...

  • 查询深圳市通相关信息

    查询深圳通相关信息 用 HTTP.GET 从开放 API 中查询深圳通信息,然后将 JSON 数据存入结构体中,再格式化输出。 注意:获取的并不是实...

  • Go语言设计模式实践:结合(Composite)

    Go语言设计模式实践:组合(Composite) 关于本系列 这个系列首先是关于Go语言实践的。在项目中实际使用Go语言也有段时间了,一个体会就...

  • 列出索引和遍历目录

    列出目录和遍历目录 获取目录列表用 ioutil.ReadDir(),遍历目录用 filepath.Walk(),使用方法请参考文章示例。 示例代码: package ma...

  • io 包的惯用接口速记

    io 包的常用接口速记 我没有 C/C++ 基础,没有接口的概念,且从 Python 投奔而来,Python 的极简主义(一个结果往往只提供一个方法),让我在...

  • 代理服务扩充

    代理服务扩展 之前自己实现了一个代理服务,当时考虑的是只要支持SOCKS5就好了,因为我经常用CHROME,配合着SwitchySharp,体验还是很棒...

  • 文件的创造与打开

    文件的创建与打开 文件操作是个很重要的话题,使用也非常频繁,熟悉如何操作文件是必不可少的。Golang 对文件的支持是在 os package ...

热门推荐: