分类: Python/Ruby
2010-06-18 14:29:30
使用django的构建简单的web服务
关于最新版Django 1.2.1 的使用细节。
网上关于使用Django构建web服务器方法很多,但是按照步骤往下走,总是有一些问题,现在总结一下,供初学者学习使用,其中大部分来自网络。
要新建一个Web 项目, 先在命令行的模式下,进入你想建立项目的目录,执行以下命令:django-admin startproject,例如:
~/Python$ django-admin startproject mysite
上面的命令将会在~/Python 下创建mysite 文件夹,其中包含了运行Django 项目的基本配置文件:
__init__.py
manage.py
settings.py
urls.py
现在,在项目上建立一个应用程序(aplication),以职位公告板”jobs” 为例子:
~/Python/mysite$ python manage.py startapp jobs
上面将建立一个应用程序的骨架,jobs 目录如下:
__init__.py
models.py
views.py
为了使项目知道新的应用程序存在,需要在settings.py 文件中的INSTALLED_APPS 添加一个条目(‘mysite.jobs’):
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'djproject.jobs',
'django.contrib.admin',
# Uncomment the next line to enable the admin:
# 'django.contrib.admin',
)
创建一个模型(Model)
Django 提供了自己的对象关系型数据映射组件(object-relational mapper,ORM)库,它可以通过 Python 对象接口支持动态数据库访问。这个 Python 接口非常有用,功能十分强大,但如果需要,也可以灵活地不使用这个接口,而是直接使用 SQL。
ORM 目前提供了对 PostgreSQL、MySQL、SQLite 和 Microsoft® SQL 数据库的支持。
在新建模型之前,需要对settings.py 文件进行数据库的配置。本例以SQLite3 为例:
DATABASES = {
'default': {
'ENGINE': 'sqlite3', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
'NAME': '/root/Sqllite/database1.db', # Or path to database file if using sqlite3. 'USER': '', # Not used with sqlite3.
'PASSWORD': '', # Not used with sqlite3.
'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
'PORT': '', # Set to empty string for default. Not used with sqlite3.
}
}
这个职位公告板应用程序有两种类型的对象:Location 和 Job。Location 包含 city、state(可选)和 country 字段。Job 包含 location、title、description 和 publish date 字段。jobs/models.py 文件内容如下:
from django.db import models
from django.contrib import admin
# Create your models here.
class Location(models.Model):
city = models.CharField(max_length=50)
state = models.CharField(max_length=50, null=True, blank=True)
country = models.CharField(max_length=50)
def __str__(self):
if self.state:
return "%s, %s, %s" % (self.city, self.state, self.country)
else:
return "%s, %s" % (self.city, self.country)
class Admin:
list_display = ("city","state","country")
class Job(models.Model): pub_date = models.DateField()
job_title = models.CharField(max_length=50)
job_description = models.TextField()
location = models.ForeignKey(Location)
def __str__(self):
return "%s (%s)" % (self.job_title, self.location)
class Admin:
list_display = ("job_title","location","pub_date")
ordering = ["-pub_date"]
search_fields=("jab_title","job_description")
list_filter = ("location",)
admin.site.register(Job)
admin.site.register(Location)
__str__
方法是 Python 中的一个特殊类,它返回对象的字符串表示。Django 在 Admin 工具中显示对象时广泛地使用了这个方法。
执行python manage.py sql jobs 可以看到模型在数据库里的模式:
BEGIN;
CREATE TABLE "jobs_location" (
"id" integer NOT NULL PRIMARY KEY,
"city" varchar(50) NOT NULL,
"state" varchar(50),
"country" varchar(50) NOT NULL
)
;
CREATE TABLE "jobs_job" (
"id" integer NOT NULL PRIMARY KEY,
"pub_date" date NOT NULL,
"job_title" varchar(50) NOT NULL,
"job_description" text NOT NULL,
"location_id" integer NOT NULL REFERENCES "jobs_location" ("id")
)
;
COMMIT;
运行数据库命令syncdb
后,将会
初始化并安装这个模型:
~/Python/mysite$ python manage.py syncdb
注意,syncdb
命令要求我们创建一个超级用户帐号。这是因为 django.contrib.auth 应用程序(提供基本的用户身份验证功能)默认情况下是在 INSTALLED_APPS 设置中提供的。超级用户名和密码用来登录将在下一节介绍的管理工具。记住,这是 Django 的超级用户,而不是系统的超级用户。
使用带图形界面的Admin 管理工具
Django 的最大卖点之一是其一流的管理界面,为我们的项目提供了很多数据输入工具。实质上,管理工具是也是一个应用程序,不过是Django 内置。与 jobs
应用程序一样,在使用之前也必须进行安装。第一个步骤是将应用程序的模块(django.contrib.admin
)添加到 INSTALLED_APPS 设置中。修改 settings.py 的内容如下:
INSTALLED_APPS = (
‘django.contrib.auth’,
‘django.contrib.contenttypes’,
‘django.contrib.sessions’,
‘django.contrib.sites’,
‘djproject.jobs’,
‘django.contrib.admin’,
)
要让该管理工具可以通过 /admin URL 使用必须对URL 进行配置,修改urls.py 的内容如下:
from django.conf.urls.defaults import *
# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
# Example:
#(r'^djproject/', include('djproject.foo.urls')),
# Uncomment the admin/doc line below and add 'django.contrib.admindocs'
# to INSTALLED_APPS to enable admin documentation:
# (r'^admin/doc/', include('django.contrib.admindocs.urls')),
# Uncomment the next line to enable the admin:
# (r'^admin/', include(admin.site.urls)),
(r'^admin/', include(admin.site.urls)),
)
这个管理应用程序有自己的数据库模型,但也需要进行安装。我们可以再次使用 syncdb
命令来完成这个过程:
~/Python/mysite$ python manage.py syncdb
启动Django 内置的测试服务器:
[root@localhost djproject]# python manage.py runserver 0.0.0.0:8000
Validating models...
0 errors found
Django version 1.2.1, using settings 'djproject.settings'
Development server is running at
Quit the server with CONTROL-C.
在浏览器中输入:即可看到。