使用Python和Django1.4搭建Web应用

源文:http://qizhanming.com/2012/04/02/python-django-get-started/

简介

Django是Python开发的Web框架。使用Django搭建Web应用很方便。原文如下:
Django is a high-level Python Web framework that encourages rapid development and clean, pragmatic design.
Developed by a fast-moving online-news operation, Django was designed to handle two challenges: the intensive deadlines of a newsroom and the stringent requirements of the experienced Web developers who wrote it. It lets you build high-performing, elegant Web applications quickly.

写本文时django的最新版本为1.4,但本文不关注新版本的特性,只搭建一个简单的应用。

安装Django

本文以CentOS 6.2为例进行安装:
安装python

# yum install python

本文使用的是CentOS 6.2 Desktop,默认安装了python.查看一下python的版本

# python --version
Python 2.6.6

Django-1.4支持python2.5以上(python3暂不支持)。具体请看Django的官方博客
根据python的版本安装setuptools,pip(使用pip安装软件很方便,pip依赖setuptools),安装setuptools很简单,到其pipy下载并安装(注意跟python的版本对应)。

# curl -O http://pypi.python.org/packages/2.6/s/setuptools/setuptools-0.6c11-py2.6.egg
# sh setuptools-0.6c11-py2.6.egg
# curl -O https://raw.github.com/pypa/pip/master/contrib/get-pip.py
# python get-pip.py

本文关注django,暂不考虑virtualenv,buildout等虚拟环境的安装。
安装django

# pip install django

查看django的版本

$ django-admin.py --version
1.4
创建Django项目及Web应用

使用django搭建Web应用很快。

$ mkdir ~/dev
$ cd ~/dev

创建项目,使用django-admin.pystartproject命令。

~/dev$ django-admin.py startproject djdemo

django-1.4创建的目录结构较以前的版本有了些调整,本文例子如下:

.
`--djdemo
   |--djdemo
   |  |--__init__.py
   |  |--settings.py
   |  |--urls.py
   |  `--wsgi.py
   `--manage.py

创建应用,使用manage.pystartapp命令,本文创建一个订单(Order)的例子。

$ cd djdemo
~/dev/djdemo$ python manage.py startapp orders

django会自动创建此应用的基本文件,目录如下:

.
`--djdemo
   |--djdemo
   |  |--__init__.py
   |  |--settings.py
   |  |--urls.py
   |  `--wsgi.py
+  |--orders
+  |  |--__init__.py
+  |  |--models.py
+  |  |--tests.py
+  |  `--views.py
   `--manage.py

在orders文件夹中新建admin.py,用于django管理工具使用。最终目录如下:

.
`--djdemo
   |--djdemo
   |  |--__init__.py
   |  |--settings.py
   |  |--urls.py
   |  `--wsgi.py
   |--orders
   |  |--__init__.py
+  |  |--admin.py
   |  |--models.py
   |  |--tests.py
   |  `--views.py
   `--manage.py
创建一个Django的模型

接下来修改models.py,管理此应有的模型。注意:如果使用非ASCII码,需要在文件头部添加

# -*- coding: utf-8 -*-

添加Order模型:

 
 
  1. # -*- coding: utf-8 -*-
  2. from django.db import models
  3.  
  4. # Create your models here.
  5. from django.utils.translation import ugettext_lazy as _
  6.  
  7. class Order(models.Model):
  8. order_no = models.CharField(max_length=255)
  9. description = models.CharField(max_length=255)
  10. created_on = models.DateTimeField(help_text=_('creation date'), auto_now_add = True)
  11. updated_on = models.DateTimeField(help_text=_('last update date'), auto_now = True)
  12.  
  13. def __unicode__(self):
  14. return self.order_no

这是一个models的例子,设计到了属性,国际化,自动填充时间等内容,关于models,更多请参考django网站的models相关文档

以下是admin.py的内容,使django可以管理这个模型。通常只需要添加就可以了如下例子:

 
 
  1. # -*- coding: utf-8 -*-
  2. from django.contrib import admin
  3. from .models import Order
  4.  
  5. admin.site.register(Order)

但是django可以定制管理界面。如下更改:

 
 
  1. # -*- coding: utf-8 -*-
  2. from django.contrib import admin
  3. from django.utils.translation import ugettext_lazy as _
  4.  
  5. from .models import Order
  6.  
  7. class OrderAdmin(admin.ModelAdmin):
  8. """Admin form Order model"""
  9. list_display = ('order_no', 'description', 'created_on')
  10. search_fields = ('order_no', 'description')
  11. fieldsets = (
  12. (_('Content'), {
  13. 'fields': ('order_no', 'description')
  14. }),
  15. (_('Advanced options'), {
  16. 'classes': ('collapse',),
  17. 'fields': ('created_on', 'updated_on')
  18. }),
  19. )
  20. actions_on_top = True
  21. actions_on_bottom = True
  22. readonly_fields = ("created_on", "updated_on")
  23.  
  24. admin.site.register(Order, OrderAdmin)

这是一个admin的例子,涉及到了列表显示,搜索,配置界面等,关于admin,更多请参考django网站的文档admin相关文档

配置

主要配置settings.pyurls.py

在settings.py开始添加如下,主要设置路径:

 
 
  1. # -*- coding: utf-8 -*-
  2. # Django settings for djdemo project.
  3.  
  4. import os
  5. import sys
  6.  
  7. ROOT_PATH = os.path.dirname(os.path.abspath(__file__))
  8.  
  9. if ROOT_PATH not in sys.path:
  10. sys.path.append(ROOT_PATH)

修改数据库配置,本文使用sqlite3,这是django自带驱动的,其他的请参考django网站的database相关文档

 
 
  1. DATABASES = {
  2. 'default': {
  3. 'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
  4. 'NAME': os.path.abspath(os.path.join(ROOT_PATH, '..', 'sqlite.db')), # Or path to database file if using sqlite3.
  5. 'USER': '', # Not used with sqlite3.
  6. 'PASSWORD': '', # Not used with sqlite3.
  7. 'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
  8. 'PORT': '', # Set to empty string for default. Not used with sqlite3.
  9. }
  10. }

接下来修改INSTALLED_APPS部分:
将orders应用添加到 INSTALLED_APPS 设置中,并去掉admin模块的#注释。

 
 
  1. INSTALLED_APPS = (
  2. 'django.contrib.auth',
  3. 'django.contrib.contenttypes',
  4. 'django.contrib.sessions',
  5. 'django.contrib.sites',
  6. 'django.contrib.messages',
  7. 'django.contrib.staticfiles',
  8. # Uncomment the next line to enable the admin:
  9. 'django.contrib.admin',
  10. # Uncomment the next line to enable admin documentation:
  11. # 'django.contrib.admindocs',
  12. )
  13. INSTALLED_APPS += (
  14. 'orders',
  15. )

配置urls.py
要让该管理工具可以通过 /admin URL 使用,只需要简单地取消项目的 urls.py 文件中提供的对应行的内容即可。

 
 
  1. # -*- coding: utf-8 -*-
  2. from django.conf.urls import patterns, include, url
  3.  
  4. # Uncomment the next two lines to enable the admin:
  5. from django.contrib import admin
  6. admin.autodiscover()
  7.  
  8. urlpatterns = patterns('',
  9. # Examples:
  10. # url(r'^$', 'djdemo.views.home', name='home'),
  11. # url(r'^djdemo/', include('djdemo.foo.urls')),
  12.  
  13. # Uncomment the admin/doc line below to enable admin documentation:
  14. # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
  15.  
  16. # Uncomment the next line to enable the admin:
  17. url(r'^admin/', include(admin.site.urls)),
  18. )

此时,程序基本配置完毕,下面开始数据库的初始化和django管理界面的使用。

先进行sql语句的显示,可以查看表结构是否正确(必须指明应用名称,本文为orders)。使用manage.pysqlall命令。

~/dev/djdemo$ python manage.py sqlall orders

得到如下结果

BEGIN;
CREATE TABLE "orders_order" (
    "id" integer NOT NULL PRIMARY KEY,
    "order_no" varchar(255) NOT NULL,
    "description" varchar(255) NOT NULL,
    "created_on" datetime NOT NULL,
    "updated_on" datetime NOT NULL
)
;
COMMIT;

接下来开始数据库初始化,使用manage.pysyncdb命令:

~/dev/djdemo$ python manage.py syncdb

期间会询问是否添加superusers,过程如下:

Creating tables ...
Creating table auth_permission
Creating table auth_group_permissions
Creating table auth_group
Creating table auth_user_user_permissions
Creating table auth_user_groups
Creating table auth_user
Creating table django_content_type
Creating table django_session
Creating table django_site
Creating table django_admin_log
Creating table orders_order

You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (leave blank to use '****'): admin
E-mail address: username@domain.com
Password: 
Password (again): 
Superuser created successfully.
Installing custom SQL ...
Installing indexes ...
Installed 0 object(s) from 0 fixture(s)

此时数据库初始化完毕。

测试

启动django,进行应用的测试,使用manage.pyrunserver命令,开启服务。

~/dev/djdemo$ python manage.py runserver

现在可以访问http://localhost:8000/admin查看。

结束语

本文主要侧重与django的安装和初步使用,不涉及其他内容(如视图,模板,国际化,生产系统部署等),重点是从头开始,到一个简单的应用。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值