Chinaunix首页 | 论坛 | 博客
  • 博客访问: 358224
  • 博文数量: 46
  • 博客积分: 4936
  • 博客等级: 上校
  • 技术积分: 575
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-25 20:14
文章分类

全部博文(46)

文章存档

2012年(4)

2011年(1)

2010年(23)

2009年(18)

分类: 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 mapperORM)库,它可以通过 Python 对象接口支持动态数据库访问。这个 Python 接口非常有用,功能十分强大,但如果需要,也可以灵活地不使用这个接口,而是直接使用 SQL

ORM 目前提供了对 PostgreSQLMySQLSQLite 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 JobLocation 包含 citystate(可选)和 country 字段。Job 包含 locationtitledescription 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.

 

在浏览器中输入:即可看到。

阅读(4189) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~