python web开发之django

Python 网站开发系列文章将不会过多说 Python 基本语法,主要是面向实践的。使用 Python 2.7、框架为 Django 1.3、数据库为 Sql Server(没有用过 MySql)。

当然,使用任何一门语言,如果对基本语法不了解的话,开发肯定会显得无从下手。在这里提供一些 Python、Django 方面的电子书资料,这些电子书包括:《征服Python:语言基础与典型应用》、《Django Web开发指南》、《Djangodoc-1.3》(英文)、《Learning Python》(英文)、《Python核心编程第二版》、《Python技术手册(第2版)》、《python简明教程》和《Python学习手册(第3版)》。当然,如果你想买纸质书的话,这里推荐下 Python 基础教程,作者对本书花费了10年的精力,大家可以想象下。

“生命短暂,请用 Python”,现在就让我们开始吧!

1.安装 Python

Python 的版本很多,本例中选择 Python 2.7,安装这个版本的 Python 可以直接使用自带的数据库 SQLite(没听过,在这就不使用了)。你可以从 Python 官网下载 Python,但你要知道在景德镇访问不了 Python 官网是很正常的(GFW赢了),所以我往 xun6 上传了个 Python 2.7,这个版本的 Python 是 .msi 格式的,所以直接安装即可,我将 Python 2.7 安装在了 D:\Python 下(请注意目录)。

2.安装 Django

安装完 Python 2.7 后开始安装 Django 1.3,可在 Django 官网上下载 Django-1.3.tar.gz 解压,我将它解压到了 E 盘下。使用命令提示符进入 Django-1.3 目录,输入以下命令来完成 Django 1.3 的安装:

python setup.py install

如图:

安装 Django 1.3

安装完成后,打开 Python Shell(IDLE (Python GUI)),Python Shell 交互以“>>>”开始,使用下边的命令来查看 Django 1.3 安装是否成功:

>>> import django
>>> print django.get_version()
1.3

如果出现“'python' 不是内部或外部命令,也不是可运行的程序或批处理文件”的错误,原因是因为python.exe文件在 Python 目录下,我们还没有设置环境变量。在我的电脑->属性->高级->环境变量->系统变量中找到 Path ,添加"D:\Python",如图(今天小阳安装的时候发现设置完环境变量后,需要关闭命令提示符,重新打开再执行命令才有效):

设置环境变量

接下来,我们创建一个 Python 项目,我在 E 盘创建一个名为"PythonProject"的项目,使用下边的命令:

django-admin.py startproject PythonProject

创建 Python 项目

如果没有配置环境变量的话,可能会遇到“'django-admin' 不是内部或外部命令,也不是可运行的程序或批处理文件”这样的错误,django-admin.py文件在 D:\Python\Scripts 目录下(我将 Python 安装在了D:\Python,请注意),添加"D:\Python\Scripts"即可,设置环境变量的方法上边内容已经提到了。

此时我们的 E:\PythonProject 下应该出现4个 .py 的文件了,以后我们会进行相应的配置:

  • __init__.py: 一个空文件,用来告诉Python这个目录是一个Python包
  • manage.py: 一个命令行工具,可以让你以多种方式与Django项目交互。
  • settings.py: 有关Django项目的配置
  • urls.py: Django项目的URL配置。

接下来,验证下我们的项目是否正常,进到 PythonProject 目录下(怎么进入相信你已经会了),输入下边命令:

python manage.py runserver

此时如果没有意外的话,结果应该如下图所示:

Python 项目正在运行

在浏览器中输入 127.0.0.1:8000 后,出现了我们第一个基于 Django 框架的 Python 的项目,如下:

限于篇幅,关于数据库的配置和连接我们在下一篇文章中再做介绍。本篇中出现了一些常用的 Python 命令,我们不必过分担心,输入几次之后相信大家就记住这些常用的命令了。

今天主要看看 Django 框架下 Sql Server 数据库的配置。我们使用pyodbc(Python ODBC library)这个模块,通过 ODBC 的方式来操作数据库。

上篇我们创建的项目如下图所示:

创建 Python 项目

由于我们使用了 Python 2.7,所以我们下载pyodbc-2.1.8.win32-py2.7.exe 即可,关于 pyodbc 的详细使用方法在Getting Started 页有详细的说明。我们在这里简单看看,因为后边操作数据库我们会使用 Django 框架中的方法。

下边是 pyodbc 连接 Sql Server 并读取表中数据的方法,使用这个方法也可检测下 pyodbc 模块是否安装正确。在 Python Shell 输入下边的代码:

import pyodbc
connection
= pyodbc.connect('DRIVER={SQL Server};SERVER=localhost;DATABASE=blog;UID=sa;PWD=google')
cur
= connection.cursor()
cur
.execute("select * from blog_article")
for row in cur:
print 'Title:'+row.title,'Content:'+row.content

结果如下图:

如果你原来使用过 VS 的话,下载安装Python工具PTVS(Python Tools for Visual Studio)后就可以使用 VS2010 调试 Python 程序了,它是一个开源和免费的VS2010插件,如下图:

vs2010 python

接下来,我们创建 blog 应用,cd 到 E:\PythonProject 下,输入 python manage.py startapp blog 即可创建 blog,如下图:

创建 python app

下边需要编辑 settings.py 文件(配置文件),找到 INSTALLED_APPS 将 'PythonProject.blog', 添加进去,这样 Django 将知道 blog 这个 app 是项目中的一部分。

Django 设计原理也遵循 MVC ,如果你使用过 ASP.NET MVC 的话就不难理解,接下来很像 Code-First 原则(设计好类再将它导入到数据库)。我们首先设计 Model,打开 models.py 文件,定义一个article类,这样 models.py 文件内容变为:

from django.db import models

class article(models.Model):
    title
=models.CharField(max_length=50)
    content
=models.CharField(max_length=4000)
    addtime
=models.DateTimeField()

导入数据库时会生动生成主键id,这里指定整型时为(IntegerField)。将 article 类导入到 Sql Server 数据库中是本篇的重点,如果你使用 SQLite 数据库的话,在 PythonProject 下新建一个名为 db 的文件夹。将 settings.py 中 DATABASES 配置如下:

DATABASES = {
   
'default': {
       
'ENGINE': 'sqlite3',
       
'NAME': r'E:\PythonProject\db\djang.db',
   
}
}

运行 python manage.py syncdb 命令,Django 将查找INSTALLED_APPS 中的 models.py ,并为其中的每个类创建一个表,如下图:

Django models 导入数据库

使用 Sql Server 稍微麻烦一些,因为在 D:\Python\Lib\site-packages\django\db\backends 缺少 Sql Server 的 backends(后端?),使用这些 backends 的前提是安装它们对应的数据库连接模块(SQLite自带)。

我们在django-pyodbc (只可在 Sql Server 2000,Sql Server 2005 下使用,本文使用 2005)可下载 Sql Server 的 backends,下载后将 build 文件夹下的 sql_server 拷贝到D:\Python\Lib\site-packages 下(base.py 128行有小bug,需要传self参数)。也可直接从东奎博客本地下载sql_server.rar(已修正),解压后直接拷贝到D:\Python\Lib\site-packages 即可。

接下来,将我们的 DATABASES 的配置改为连接 Sql Server 2005 的方式,如下:

DATABASES = {
   
'default': {
       
'ENGINE': 'sql_server.pyodbc',
       
'NAME': 'blog',                    
       
'USER': 'sa',                    
       
'PASSWORD': 'google',                
       
'HOST': 'localhost',                    
   
}
}

我们先在 Sql Server 中新建 "blog" 数据库,再次执行 python manage.py syncdb 命令,即可将 models.py 中的类导入到 Sql Server 库中,结果如下:

Python models 导入数据库

如果 models.py 模型中的类发生变化时,syncdb 命令不会改变数据库中的表结构,我们需要手动进行修改,也可将数据库中对应的表删除后再执行 syncdb 进行修改。执行完成后会提示是否设置管理账号,我们依次输入 "yes"、用户名、邮箱、密码、确认密码即可完成超级管理员的创建,它的使用会在下篇介绍。

本篇就到这里,主要介绍了 Django 框架下 Sql Server 的连接方式以及 models 的配置,并成功的将 models 类导入数据库。下一篇我们将看下Django 自动化后台应用程序 admin 以及模板的使用。


上一篇文章中,我们创建了 blog 应用,并成功将 models.py 模块中的类导入到了 Sql Server 数据库,今天就让我们看看自动 admin 应用和模板的简单使用。

首先,需要指定一个 URL 来访问 admin ,只需将 urls.py 中自动生成的 (r'^admin/', include(admin.site.urls)), 前的 "#" 号(注释)去掉即可。这样 urls.py 中的 urlpatterns 如下:

urlpatterns = patterns('',
   
(r'^admin/', include(admin.site.urls)),
)

打开 admin 应用,出现下边的错误:

Python admin 应用错误

原因是 admin 应用不是 Django 中必要的组件,同配置 blog 应用一样,我们只需将 settings.py 模块 INSTALLED_APPS 中 'django.contrib.admin', 前的 "#" 号去掉即可。刷新下页面,结果如下:

Python admin 应用修改

发现没有出现编辑文章项,这是因为我们没有告诉 Django 要在 admin 窗口中显示哪个 model,打开 blog/models.py 文件,导入 admin 应用并注册 article ,这样 models.py 文件为:

from django.db import models
 
from django.contrib import admin
class article(models.Model):
    title
=models.CharField(max_length=50)
    content
=models.CharField(max_length=4000)
    addtime
=models.DateTimeField()
 
admin
.site.register(article)

这样,刷新我们的页面,结果如下:

Python admin

点击 "Add" 即可发布文章,如下:

Python admin 应用

右下角有三个按钮,分别为“保存并发另一篇”、“保存并继续编辑本篇文章”和“保存”,我在这里发了三篇文章做测试。文章管理列表如下:

Python admin 管理

看起来确实不友好,不知道 Django 为什么默认会这样显示,现在就让我们改变显示方式。我们在 models.py 中添加一个 article_admin 类,并把它添加到注册代码中,如下:

class article_admin(admin.ModelAdmin):
    list_display
=('title','addtime')
admin
.site.register(article,article_admin)

修改 Python admin 显示方式

可见,我们显示了文章的标题和发布时间,这样方便对文章的管理,我们可以进行排序等操作。到这里,我们简单了解了 admin 应用,可见对 blog 的管理还是很方便的。

接下来让我们看看 Django 中的模板,使用模板将要呈现的数据和 HTML 代码分离出来。在 "blog" 文件夹下新建 "templates" 文件夹,并在其中新建 "archive.html" 文件,这是我们的“文章归档”模板。需要注意的是 "templates" 文件夹的名字只能是这样,而模板的名字我们可以任意命名。往 blog/templates/archive.html 文件中添加如下代码:

{% for m in model %}
   
<article>
       
<h2>{{ m.title }}</h2>
       
<p>{{ m.addtime }}</p>
       
<p>{{ m.content }}</p>
   
</article>
{% endfor %}

接下来在 views.py 中添加读取文章的代码,并使用模板将文章显示出来,如下:

from django.template import loader,Context
from django.http import HttpResponse
from PythonProject.blog.models import article

def archive(request):
    articles
=article.objects.all()
    t
=loader.get_template("archive.html")
    c
=Context({'model':articles})
   
return HttpResponse(t.render(c))

写法是很固定的,相信大家能够理解。最后在 urls.py 文件添加 archive,如下:

from django.conf.urls.defaults import *
from PythonProject.blog.views import archive
from django.contrib import admin
admin
.autodiscover()
 
urlpatterns
= patterns('',
    url
(r'^admin/', include(admin.site.urls)),
    url
(r'^archive/',archive),
)

到这里,我们所做的工作显示如下:

Django 模板的使用

结果是有了,但离我们一个像样的 blog 还很远。鉴于很多页面有相同的共用部分,我们创建一个基础模板。在这里为节省时间,我直接将东奎博客中的公用部分拿过来了,在 templates 文件夹下新建 "base.html" 公用模板,内容如下:

<!DOCTYPE html>
<html>
<head>
   
<link rel="stylesheet" type="text/css" href="/static/admin/css/Site.css" />
   
<!--[if lt IE 9]>
        <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
    <![endif]-->

</head>
<body id="archive">
   
<div id="wrapper">
       
<header>
           
<a id="logo" href="/">Python001</a>
       
</header>
       
<nav>
           
<ul>
               
<li><a class="home" href="/">Home</a></li>
               
<li><a class="archive" href="/archive/">Archive</a></li>
           
</ul>
       
</nav>
       
<section id="container" class="group">
           
<section id="left">
                {% block content %}
                {% endblock %}
           
</section>
           
<aside id="right">
           
</aside>
       
</section>
       
<footer>
       
</footer>
   
</div>
</body>
</html>

接下来,我们修改 "archive.html" 模板为:

{% extends "base.html" %}
{% block content %}
{% for m in model %}
   
<article>
       
<h2>{{ m.title }}</h2>
       
<p>{{ m.addtime }}</p>
       
<p>{{ m.content }}</p>
   
</article>
{% endfor %}
{% endblock %}

刷新我们的页面,可以看到现在的效果好多了,如下:

Python 公用模板的使用方法

限于篇幅,对 Django 中的模板使用我们会再花一篇的内容来做个介绍,如在图中时间格式的转换、文章排序等一些技巧。同时需要说明的是,文中没有过多的进行细节的解释,可能需要读者对 Python 语言有一定的了解,如元组、引入模块等等概念。


接着上一篇 Python 网站开发(三)Django 模板的使用,本篇对 Django 模板做进一步的学习。我们会对 Django 模板中常用的技术进行一下小结,好为将来 Python 网站的实际开发做好准备。

1.Django 模板块标签(blog tag)

如我们在 Python 网站开发(三)Django 模板的使用中使用的 for 标签,它就是一个块标签,语法和 Python 中一致,只不过在 Django 模板中是包含在 {% %}中,如下:

{% for m in model %}
   
<article>
       
<h2>{{ m.title }}</h2>
       
<p>{{ m.addtime }}</p>
       
<p>{{ m.content }}</p>
   
</article>
{% endfor %}

类似的模板标签还有几个,以后我们可能会使用到。

2.Django 模板的继承

如在上一篇文章中,我们新建了"base.html"公用模板,使用下边的语句即可完成模板的继承:

{% extends "base.html" %} 

3.Django 模板过滤器

我们可以使用 Django 模板过滤器来格式化的显示数据,Django 模板过滤器大家可以参考Django 模板过滤器列表。只需使用一个竖杠("|"),如使用 date 可将时间格式转换为"yyyy-MM-dd"的形式:

<span>{{ m.addtime|date:"Y-m-d" }}</span> 

Django 模板日期格式大家可以参考 Django 模板日期格式表。使用 truncatewords 可截取指定个数的单词,如下边的代码截取显示前三个单词,我们第一篇文章标题会显示为 "First python blog ...".

{{ m.title|truncatewords:"3" }}

使用时一定要注意空格,如在 "|" 左右加上空格的话就会报错。

4.Django 数据排序

虽然,排序本身不属于模板的任务,但它也是数据的表现形式,所以我们总结到这里。我们可以在视图(views.py)读取数据时指定排序方式,如下:

    # 按id升序排列
    articles
=article.objects.all().order_by("id")
   
# 按id降序排列
    articles
=article.objects.all().order_by("-id")

当然,好的做法是在 model (models.py) 中修改,方法是定义一个 Meta 嵌套类,然后指定 ordering 属性,如下:

class article(models.Model):
    title
=models.CharField(max_length=50)
    content
=models.CharField(max_length=4000)
    addtime
=models.DateTimeField()
   
class Meta:
        ordering
=('-id',)

('-id',)是一个无组,请注意逗号,我们在 urls.py 中已经使用过。在 models.py 中设置后,如果再在视图设置的话,会以视图中的为准。这里再次提醒下缩进,Python 中控制代码逻辑就是靠缩进来控制的。如果缩进不正确,就会出现错误。

5.Django 模板中文乱码解决

可以看到,Django 模板本身为 ".html" 文件,所以出现乱码是由于文件保存格式问题。如我新建模板时喜欢用记事本,新建的文件默认为 ".ANSI" 格式从而导致 Django 模板的中文会出现乱码。解决时只需用记事本打开文件并将它保存为"UTF-8"的即可。

6.Python 文件中文乱码解决

如在 Python 文件(.py)中使用中文注释等时就会出现错误,解决方法是在 .py 文件的开头加入下边的代码:

#coding=utf-8  

使用 Django 模板可能碰到的常见问题就是这些,将 Django 模板这块单独总结一下,希望能为我们后续文章做好铺垫。


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值