• django开发环境搭建(参考流程)


    分类: LINUX

    原文地址:django开发环境搭建(参考流程) 作者:bailiangcn

          对于一个初学者,在实际的开发环境中,应该采用什么的样的工具来开发django呢?

          我想环境至少应该具备的特性有:

    • 多版本python环境的支持
    • 版本控制
    • 自动测试框架
    • 数据库支持迁移
    • 部署的自动化

    参考文档

    1. VirtualEnv 和Pip 构建Python的虚拟工作环境

    2. 使用VitrualEnvWrapper隔离python项目的库依赖

    1. South的快速指南-英文

    2. django South 介绍

    3. 用 Django South 做 Database Migration

    • Fabric文档
    1. Fabric文档-英文

    2. Fabric入门指南-英文

    3. Fabric自动化你的任务

    4. 使用Fabric批量执行副武器任务

          本文试图针对以上问题,总结一个django开发的“标准的工作流程”。

    前期准备

    • python软件已经安装

    • 本文以 ubuntu 12.04 64位 作为环境举例

    一、Python虚拟环境的搭建

          使用工具virtualenv搭建Python虚拟环境,主要希望解决几个问题:

    • 隔离项目之间的第三方包依赖,如A项目依赖django1.2.5,B项目依赖django1.3。

    • 为部署应用提供方便,把开发环境的虚拟环境打包到生产环境即可,不需要在服务器上再折腾一翻。

    操作步骤

          假设需要建立一个名称为 ELC 虚拟环境

          (基本virtualenvwrapper命令列表)

            1. 安装 virtualenvwrapper (virtualenv的命令包装) ,会自动安装 virtualenv
    
                    $ sudo pip install virtualenvwrapper
    
            2. 修改 ~/.bashrc ,把以下内容加入.bashrc 的尾部
    
                    export WORKON_HOME=$HOME/.virtualenvs
                    export PROJECT_HOME=$HOME/directory-you-do-development-in
                    source /usr/local/bin/virtualenvwrapper.sh
    
                然后执行命令让virtualenvwrapper命令生效
    
                    $ source .bashrc
    
            3. 建立 ELC 环境
    
                    $ mkvirtualenv ELC
    
            4. 检查 env 的环境
    
    • 提示符变为 (ELC)[bl@bl-family:~]$
    • which python 输出为
                    /home/bl/.virtualenvs/ELC/bin/python
    

    二、安装django

          假设准备安装最新的django版本。

    操作步骤

            1. 保证提示符是 (ELC)的情况下,也就是在 ELC虚拟状态下
    
                    pip install django
    

    如果出现 Cannot fetch index base URL https://pypi.python.org/simple/ 错误 参考这里解决

            2. 验证安装情况
    
                    (ELC)$ which django-admin.py
    
               返回结果
    
                    /home/bl/.virtualenvs/ELC/bin/django-admin.py
    

    三、建立初始的django项目

          假设准备建立一个名称为 ELcloud 的django项目。

    操作步骤

            1. 保证提示符是 (ELC)的情况下,也就是env状态下
    
                    (ELC)$ django-admin.py startproject ELcloud
    

          现在在家目录下 ELcloud 的目录结构是:

                /home/bl/ELcloud
                       |---
                       |---manage.py
                       |---ELcloud
                       |      |---urls.py
                       |      |---__init__.py
                       |      |---wsgi.py
                       |      |---settings.py
    

    四、使用git和坚果云进行版本控制

          我平常喜欢使用国内的坚果云作为代码的托管服务器,所以下面介绍如何使用坚果云配合git来进行管理代码,当然使用github也可以。

    操作步骤

            1. 初始化本地 git 库
    
                    (ELC)$ cd ~/ELcloud
                    (ELC)$ git init
    
            2. 因为settings.py配置文件会有敏感信息,提交一个初始化的settings_default.py,建立 .gitignore 文件忽略实际使用的 settings.py
    
                    (ELC)$ cp ~/ELcloud/ELcloud/settings.py ~/ELcloud/ELcloud/settings_default.py
                    (ELC)$ echo -ne '*.pyc
    settings.py
    *.json' > .gitignore
    
               现在 .gitignore 文件的内容变成
                   *.pyc         python的中间文件
                   settings.py   项目的配置文件
                   *.json        django生成的中间文件
    
            3. 进行首次的本地提交
    
                    (ELC)$ git add .
                    (ELC)$ git commit -a -m "项目建立,初次提交"
    
            4.从本地向坚果云推送
    
                     $ git clone --bare ~/ELcloud ~/Nutstore/git/ELcloud.git
    

    五、通过South对django数据库进行维护

          django的syncdb命令在数据库表首次建立时能够根据model建立相应的表,但是一旦数据库中有同名的表,则syncdb命令不会更新数据库。虽然不能说django这样设计不好,但确实挺麻烦。

          South解决了这个问题,能够检测对models的更改并同步到数据库。

    操作步骤

            1. 安装south
    
                    (ELC)$ pip install south
    
            2. 在 django 的 settings.py 的 INSTALLED_APPS 段中增加 'south',
               现在 ~/ELC/ELcloud/ELcloud/settings.py 的 INSTALLED_APPS
               段内容是(django 1.5.1):
    
                    INSTALLED_APPS = (
                    'django.contrib.auth',
                    'django.contrib.contenttypes',
                    'django.contrib.sessions',
                    'django.contrib.sites',
                    'django.contrib.messages',
                    'django.contrib.staticfiles',
                    # Uncomment the next line to enable the admin:
                    # 'django.contrib.admin',
                    # Uncomment the next line to enable admin documentation:
                    # 'django.contrib.admindocs',
                    'south',
                    )
    
            3. 根据自身的环境设置 settings.py 的数据库部分,比如我使用 postgrepsql ,
               需要先安装 psycopyg2 接口
    
                    (ELC)$ sudo apt-get build-dep psycopg2
                    (ELC)$ pip install psycopg2
    
               然后手工建立一个elist的数据库,修改settings.py的 DATABASES 部分,去掉注释后是:
    
                    DATABASES = {
                        'default': {
                            'ENGINE': 'django.db.backends.postgresql_psycopg2', 
                            'NAME': 'elist', 
                            'USER': 'databaseuser',
                            'PASSWORD': 'password',
                            'HOST': 'localhost',
                            'PORT': '',        
                                }
                            }
    
            4. 执行django的syncdb命令,在建立实际django应用前让South建立必须的数据表。
    
                   (ELC)$ python manage.py syncdb
    
               会提示建立django应用中的用户名、电子邮件和密码
    
            5. 建立 pip 安装的软件环境的快照,用于版本库管理
    
                   (ELC)$ pip freeze > requirements.txt
    
               查看 requirements.txt 的内容
    
                    Django==1.5.1
                    South==0.7.6
                    argparse==1.2.1
                    psycopg2==2.5
                    wsgiref==0.1.2
    
                如果需要安装,使用命令:
                   (ELC)$ pip install -r requirements.txt
    
            6. 把 requirements.txt 加入版本控制,再次提交
    
                    (ELC)$ cd ~/ELcloud
                    (ELC)$ git add requirements.txt
                    (ELC)$ git commit -a -m "south安装完毕,初次提交"
    
            7. 按照正常的方式建立一个 django 的应用app,比如一个叫做 elist 的应用
    
                    (ELC)$ python manage.py startapp elist
    
               在 settings.py的INSTALLED_APP部分增加 elist,现在内容是:
    
                    INSTALLED_APPS = (
                    'django.contrib.auth',
                        ...
                    'south',
                    'elist',
                    )
    
               在添加model前,需要告诉South准备迁移数据库
    
                    (ELC)$ python manage.py schemamigration elist --initial
                    (ELC)$ python manage.py migrate elist
    
               这样south会建立一个合并文件,用于应用和恢复数据库操作,在修改django 的 model后,可以使用命令
    
                    (ELC)$ python manage.py schemamigration elist --auto     
                           #检测对models的更改,但并不实际提交数据库
    
                    (ELC)$ python manage.py migrate elist  #实际更改数据库
    

    六、使用fabric进行自动部署

          Fabric是一个Python库,可以通过SSH在多个host上批量执行任务。你可以编写任务脚本,然后通过Fabric在本地就可以使用SSH在大量远程服务器上自动运行。这些功能非常适合应用的自动化部署,或者执行系统管理任务。

    操作步骤

            1. 安装fabric
    
                    (ELC)$ pip install fabric
    
            2. 在 ~/ELcloud 目录下,建立一个名称为 fabfile.py的文件,内容如下:
    
                    #!/usr/bin/env python
                    # -*- coding: UTF-8 -*-
    
                    from fabric.api import local
    
                    def pd():
                        """
                        准备部署
                        """
                        local('python manage.py test elist')
                        local('git add -p && git commit')
    
                使用方式是 $ fab pd  ,能够自动测试django应用,更多 fabric的用法请参考fabric文档。
    

    七、安装django-debug-toobal插件帮助开发调试

    主站网址       django debug toolbar是一个django下的插件,能够在浏览器侧面显示一个面板,在实际开发中用来查看变量,分析性能等各方面都有不错的效果。

    版本 0.9.4 显示的内容

    • django版本
    • cpu运行时间
    • django的settings
    • HTTP Headers
    • Request Vars (view函数、Cookies Variables、Session Variables、Get Variables、Post Variables)
    • SQL的实际语句及状态
    • 模板及上下文参数
    • Signals
    • Logging

    操作步骤

    1. 安装

      (ELC)$ pip install django-debug-toolbar

    2. 配置 django的settings.py
      • 中间件部分(尽量往后放)
        MIDDLEWARE_CLASSES = (
                # ...
                'debug_toolbar.middleware.DebugToolbarMiddleware',
                # ...
            )
        
      • 安装app,在INSTALLED_APPS部分增加一行:
        INSTALLED_APPS = (
                    ...
                'debug_toolbar',
                )
        
      • 在settings.py末尾增加一行:(参考这里)
        INTERNAL_IPS = ('127.0.0.1',)
        

          注意在使用中,插件需要渲染摸板才能看到,否则看不到效果。

    附录

    1.virtualenvwrapper常用命令

    • 创建虚拟环境 mkvirtualenv [env]

    • 列出当前环境安装的包 lssitepackages

    • 返回系统环境 deactivate

    • 切换环境 workon [env]

    • 删除环境 rmvirtualenv [env]

    2.django安装错误解决

          如果在 pip install django过程中出现如下错误信息:

            Downloading/unpacking django
              Cannot fetch index base URL https://pypi.python.org/simple/
              Could not find any downloads that satisfy the requirement django
            No distributions at all found for django
    

          首先使用命令 pip --version检查pip的版本,如果是 1.3.1,说明是 pip 1.3.1 与低版本的 OpenSSL 库不兼容造成的访问 https 错误,一种解决办法是:

                 $ workon ELC
            (ELC)$ easy_install pip==1.2.1
    

    3.django 端口占用的问题

          如果在 python manager runserver过程中出现如下错误信息:

        Error: That port is already in use.
    

          解决办法是:

         $ sudo fuser -k 8000/tcp
    

    4.south的回退问题

          有时候在south的使用过程中,希望回退到某个版本,可以使用下面的命令。

         # 列出所有版本,前面带星号表示已经应用
         $ python manage.py migrate --list
    
         # 会退到第13号版本
         $ python manage.py migrate elist 0013
    
     
  • 相关阅读:
    HTMLPARSER.NET 参考资料
    C#线程篇---Task(任务)和线程池不得不说的秘密(5)
    C#控制定位Word光标移动到任意行或者最后一行,取得光标位置等操作
    处理Selection对象和Range对象——Word VBA中重要的两个对象
    C# word开发
    c# 解析JSON的几种办法
    NameValueCollection详解
    解析jquery获取父窗口的元素
    Window_Open详解
    Implementing Remote Validation in MVC
  • 原文地址:https://www.cnblogs.com/L-H-R-X-hehe/p/3816276.html
Copyright © 2020-2023  润新知