Django实践-简单实例

来源:互联网 发布:好看的末世小说知乎 编辑:程序博客网 时间:2024/05/01 19:59

Django简介

Django是一个开放源代码的Web应用框架,由Python写成。采用了MVC的软件设计模式,即模型M,视图V和控制器C。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的。并于2005年7月在BSD许可证下发布。这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的。

Django的主要目标是使得开发复杂的、数据库驱动的网站变得简单。Django注重组件的重用性和“可插拔性”,敏捷开发和DRY法则(Don'tRepeat Yourself)。在Django中Python被普遍使用,甚至包括配置文件和数据模型。

Django于2008年6月17日正式成立基金会。

 

-- 摘自维基百科

Django安装

下载

Django最新版本为1.6.1,下载地址:

https://www.djangoproject.com/download/

 

解压Django-1.6.1.tar.gz 文件,将解压后的Django-1.6.1整个目录放到C盘根目录下。(也可放到其他目录下)

环境变量配置

新建系统变量如下:

PYTHONPATH = C:\Python27;C:\Django-1.6.1; 如下图:

 

搭建Django开发环境

安装Eclipse

下载Eclipse standard 4.3

http://www.eclipse.org/downloads/packages/eclipse-standard-43/keplerr

安装Eclipse PyDev插件

 通过Help-> Eclipse Marketplace 菜单安装Pydev插件。如下图:

 

安装MySQL-Python

下载地址:https://pypi.python.org/pypi/MySQL-python/1.2.4

 (MySQL-python-1.2.4.win32-py2.7.exe)

安装PIL库(可选,用于图像处理)

下载地址:http://www.pythonware.com/products/pil/index.htm

简单的Django Web程序

以下以一个产品展示站点为例,演示如何快速创建一个Web系统。

系统组成:

  • 前台展示:显示所有产品。
  • 后台管理:维护产品信息。

 

实体类型:

  • 产品类别(名称,描述,所属父类别)
  • 产品(名称,描述,价格,所属类别,排序号)
  • 产品图片(产品,图片)

创建项目

Pydev插件可能存在bug,有时候无法通过Eclipse创建Django项目。此时,可以通过命令行创建新的Django项目:

cd c:\django-1.6.1\django\bin

django-admin.py startproject pms

django-admin.py startproject pms c:\temp\pms

 

随后,可创建一个空白项目,利用Eclipse的import功能将以上创建的django项目文件导入。文件目录结构如下:


右键点击项目名称,转换为Django项目:

 

依次创建static, templates目录。

创建应用程序

右键点击项目名,创建应用程序wsite

修改配置文件

1)数据库配置

编辑settings.py文件,修改以下配置项:

DATABASES = {

    'default': {

        'ENGINE': 'django.db.backends.mysql',

        'NAME': 'pms',

        'USER':'root',

        'PASSWORD':'root',

        'HOST':'localhost',

        'PORT':'',

    }

}

 

2)注册应用程序

编辑settings.py文件,添加新增的wsite应用程序:

INSTALLED_APPS =(

    'django.contrib.admin',

    'django.contrib.auth',

    'django.contrib.contenttypes',

    'django.contrib.sessions',

    'django.contrib.messages',

    'django.contrib.staticfiles',   

    'wsite'

)

 

3)配置URL地址映射

编辑url.py文件:

# Uncommentthe next two lines to enable the admin:

# fromdjango.contrib import admin

admin.autodiscover()

 

urlpatterns =patterns('',

    # Examples:

     url(r'^$', 'wsite.views.index', name='index'),

     url(r'^index$', 'wsite.views.index', name='index'),

 

    # Uncomment the next line toenable the admin:

    url(r'^admin/',include(admin.site.urls)),

)

 

4)配置静态文件路径

编辑settings.py文件:

STATIC_URL = '/static/'

 

TEMPLATE_DIRS =(

    # Put strings here, like "/home/html/django_templates"or "C:/www/django/templates".

    "c:/PythonProject/pms/templates",    

    # Always use forward slashes, even onWindows.

    # Don't forget to use absolute paths,not relative paths.

)

 

STATICFILES_DIRS= (

    os.path.join(BASE_DIR, "static"),

    'C:/PythonProject/static/',

    'C:/PythonProject/static/upload',

)

 

4)配置本地化支持

在seeting.py文件中添加本地化支持。

MIDDLEWARE_CLASSES= (

    'django.contrib.sessions.middleware.SessionMiddleware',

    'django.middleware.locale.LocaleMiddleware',

    'django.middleware.common.CommonMiddleware',

    'django.middleware.csrf.CsrfViewMiddleware',

    'django.contrib.auth.middleware.AuthenticationMiddleware',

    'django.contrib.messages.middleware.MessageMiddleware',

    'django.middleware.clickjacking.XFrameOptionsMiddleware',

)

创建Model类

#coding:utf-8

 

from admin import PMSModel

from django.contrib import admin

from django.db import models

from pms.thumbs importImageWithThumbsField

      

class ProductCategory(PMSModel):

    '''产品分类。'''

    name = models.CharField(max_length=50, verbose_name="名称")

    description = models.CharField(max_length=100, verbose_name="描述", null=True, blank=True)

    parent_category = models.ForeignKey("self", verbose_name="所属父类别", null=True, blank=True)

    order = models.IntegerField(verbose_name="排序号")

    

    def __unicode__(self):

        return self.name   

   

    class Meta:

        verbose_name = "类别"

        verbose_name_plural = verbose_name        

 

class Product(PMSModel):

    '''产品'''

    name = models.CharField(max_length=100, verbose_name="名称")

    price = models.FloatField(verbose_name="价格")

    category =models.ForeignKey(ProductCategory, verbose_name="所属类别")  

    description =models.TextField(verbose_name="描述")

    order_number =models.IntegerField(verbose_name="序号")

   

    def __unicode__(self):

        return self.name

   

    class Meta:

        verbose_name = "产品"

        verbose_name_plural = verbose_name

   

class ProductImage(PMSModel):

    '''商品图片。一个商品可以对应多个图片。'''

    Product = models.ForeignKey(Product)   

    image = ImageWithThumbsField(upload_to="static/upload",verbose_name="图片", sizes=((200,200),))   

   

    def image_thumb(self):

        dot_index = self.image.url.rfind(".")

        thumb_url = self.image.url[0:dot_index] +".200x200" +self.image.url[dot_index:]

        return '<imgsrc="/%s"width="100" height="100" />' % (thumb_url)

    image_thumb.allow_tags = True

    image_thumb.short_description = "预览"

   

    def __unicode__(self):

        return self.image.url   

    class Meta:

        verbose_name = "产品图片"

        verbose_name_plural = verbose_name

   

class ProductImageInline(admin.TabularInline):

    model = ProductImage

    fields = ('image','image_thumb')

    readonly_fields = ['image_thumb'

    extra = 0  #不需要空白行;需要时可以点击添加按钮

   

class ProductCategoryAdmin(admin.ModelAdmin):

    list_display = ('name', 'parent_category','order')

    ordering=("order",)  

 

class ProductAdmin(admin.ModelAdmin):

    inlines = [ProductImageInline]

    search_fields = ('name',)  

 

#启用Model的后台管理功能

admin.site.register(ProductCategory,ProductCategoryAdmin)

admin.site.register(Product,ProductAdmin)

创建View类

#coding:utf-8

fromdjango.shortcuts import render_to_response

from models importProduct,ProductCategory,ProductImage

 

def index(request):  

    ''' Index view '''

   

    products = Product.objects.all();

    for p in products:

        images =ProductImage.objects.filter(Product_id=p.id)

        if images.count > 0:

            p.image = images[0].image

    return render_to_response(

                              "index.html",

                             {"products" : products })

创建模板文件

Base.html文件:

<!DOCTYPE html>

<html>

<head>

    <meta charset="UTF-8"/>

    <title>PMS</title>    

</head>

 

<body>

    <div style="clear:both">

        Header(如导航菜单等)

    </div>

        {% block content %}

        {% endblock%}

    <div style="clear:both">

        Footer(如版权信息等)

    </div>

   

</html>

 

Index.html文件:

{% extends"base.html" %}

 {% block content %}

    <div style="width:1000px;">

        {% for m in products%}

            <divstyle="width:240px;float:left;">

                <div>

                    <imgwidth="240" height="240"

                        alt="" src="/{{m.image}}">

                </div>

                <div>{{m.name}}</div>

                <div>单价:{{m.price}}</div>                     

                <br/>

                <divstyle="width:240px;text-align:center">

                    <a href="#">查看详情</a>

                </div>

                <br/>

            </div>           

        {% endfor%}     

    </div>

{% endblock %}

验证代码

命令行进入到项目根目录下,验证代码是否存在错误。比如:

cd c:\pythonproject\pms

manage.py validate

创建(同步)数据库

命令行进入到项目根目录下,执行命令:

cd c:\pythonproject\pms

manage.py syncdb

启动内置web服务器

命令行进入到项目根目录下,启动Django内置Web服务器。默认后台管理地址为localhost:8000\admin。 比如:

cd c:\pythonproject\pms

manage.py runserver

注意:

请确保已事先创建好数据库。

首次运行时,系统会提示是否创建管理员账号。按照提示创建即可。比如创建一个用户名为admin,密码为admin的管理员账号。

浏览站点

最后,通过localhost:8000/admin访问后台管理站点;通过localhost:8000访问站点主页。(默认Index主页)

 

示例程序完整源代码

以上代码粘贴时肯能出现错误,特附上完整源代码,仅供学习参考:
http://download.csdn.net/detail/zythy/6733375
1 2
原创粉丝点击