BAE3.0搭建Django项目教程

2014/11/09   
分类:  blog    python    django   

最近闲来无事,学习一下python来搭建个博客。

1、简单学习了python语言

网上看看python基本语法,两三天搞定

2、本地环境搭建

  • python 2.x(最好用2.x吧,稳定通用)
  • django1.6.2(BAE上面目前最高版本)
  • mysql(在mac10.10上面安装,没有对应版本,要取消开机启动,才能安装成功)
  • MySQLdb/pil
  • DjangoUeditor百度的一个文本编辑器
  • 其他漏掉的再补充

3、BAE控制台上面创建一个Django项目,使用python-web环境

  • 使用svn/git下载到本地,我用versions(Mac下),使用建议checkout下来目录作为开发
  • 在根目录新建/打开requirements.txt文件,这是python安装模块(与pip安装相同)
  • 我使用的如下(不写”==”就是安装BAE上面默认最新的):
django==1.6.2
MySQL-python
DjangoUeditor
pil
  • 修改index.py,看看Django环境,提交后打开网页,就能看到版本号了
import django

def app(environ, start_response):
    status = '200 OK'
    headers = [('Content-type', 'text/html')]
    start_response(status, headers)
    body=["Welcome to Baidu Cloud!\n"]
    #return body
    return 'django version:' + django.get_version() #1.6.2
    
from bae.core.wsgi import WSGIApplication
application = WSGIApplication(app)

4、Django模块、目录创建

  • 在本地使用cmd/ bash下,cd到项目目录,创建项目。这里我把project_name再修改成web-config了,只是放置setting信息,个人喜好。
python django-admin.py startproject  project_name
  • 子创建模块
python manage.py startapp blog
  • 我的目录:
project
    |-- web-config
        |-- wsgi.py
        |-- urls.py
        |-- settings.py
        |-- __init__.py
    |-- templates
    |-- static
    |-- media <-上传文件目录
    |-- django_admin_bootstrapped <-这里使用了bootstrap后台管理显示
    |-- blog <-这就是新建的模块
        |-- templates <-有一个独立的方便些
        |-- views.py
        |-- urls.py <--独立一个
        |-- models.py
        |-- admin.py
        |-- __init__.py
    |-- manage.py
    |-- requirement.txt
    |-- app.conf
    |-- favicon.ico
    |-- index.py <--这个文件后续可以删掉

5、Django配置

  • settings.py修改
    1. 开启DEBUG = True, 方便调试
    2. ALLOWED_HOSTS = [‘*’],通用访问,也可以固定
    3. 添加模块
INSTALLED_APPS = (
    'django_admin_bootstrapped.bootstrap3',
    'django_admin_bootstrapped',#这两个要放置在admin
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'DjangoUeditor', #百度文本编辑器
    #下面都是我自己添加的模块
    'home',
    'app',
    'blog',
)
  1. 数据库配置mysql,为了同步本地与BAE,添加了条件判断
if 'SERVER_SOFTWARE' in os.environ: #BAE
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'XXXX', #根据自己BAE上面的数据库配置
            'USER': 'XXXX',
            'PASSWORD': 'XXXX',
            'HOST': 'sqld.duapp.com',
            'PORT': '4050',
        }
    }
else: #Location
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'mydb',
            'USER': 'root',
            'PASSWORD': '',
            'HOST': '127.0.0.1',
            'PORT': '3306',
        }
    }
  1. 静态文件配置static目录,不知道为啥我本地与服务器还是有点区别
STATIC_URL = '/static/'
if 'SERVER_SOFTWARE' in os.environ: #BAE
    STATIC_ROOT = 'static'
    STATICFILES_DIRS = (
        '',
    )
else:
    STATIC_ROOT = ''
    STATICFILES_DIRS = (
        'static',
    )
  1. 模板路径Template配置,各个模块下(如blog)是会自动查找的,此配置的目录优先,最好每个目录下命名不要相同,否则会混淆的
TEMPLATE_DIRS = (
    # each app/templates had been add
    # self add
    os.path.join(os.path.dirname(__file__), os.path.pardir, 'templates'),
)
  1. 上传目录media配置
MEDIA_ROOT = 'media'
MEDIA_URL = '/media/'
urls.py配置,直接贴了
from django.conf.urls import include, url
from django.conf import settings
from django.contrib import admin
admin.autodiscover()#为啥加这个给忘了

urlpatterns = [
    # Examples:
    # url(r'^$', 'mydjango.views.home', name='home'),
    # url(r'^blog/', include('blog.urls')),
    url(r'^static/(?P<path>.*)$','django.views.static.serve',{'document_root':settings.STATIC_ROOT}), #static配置
    
    url(r'^media/(?P<path>.*)$','django.views.static.serve',{'document_root':settings.MEDIA_ROOT}), #media配置
    
    url(r'^admin/', include(admin.site.urls)), #admin管理
    
    # Django Ueditor
    url(r'^ueditor/', include('DjangoUeditor.urls')),
    
    # my apps
    url(r'^$', 'home.views.index'), #这个是配置主页的
    url(r'^blog/', include('blog.urls')),
]

wsgi.py配置,注意判断本地与BAE的区别

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "web-config.settings")

if 'SERVER_SOFTWARE' in os.environ: #BAE
    from django.core.handlers.wsgi import WSGIHandler
    from bae.core.wsgi import WSGIApplication
    application = WSGIApplication(WSGIHandler())
else:
    from django.core.wsgi import get_wsgi_application
    application = get_wsgi_application()

6、BAE上运行

python manage.py syncdb生成数据库(自己模块自由扩展咯)
python manage.py runserver本地运行,localhost:8000/admin,一切正常
svn上传BAE,xxx.duapp.com/admin。得到了404,发现只有xxx.duapp.com能访问。现在就需要配置app.conf了,把index.py去掉,换成我们的wsgi.py。(再运行就正常了)
handlers:
  - url : /* #这里配置成这样为通用
    script: web-config/wsgi.py

  - expire : .jpg modify 10 years
  - expire : .swf modify 10 years
  - expire : .png modify 10 years
  - expire : .gif modify 10 years
  - expire : .JPG modify 10 years
  - expire : .ico modify 10 years

啊~ 记得把本地mysql数据库导出,上传导入到BAE上的数据库中

7、注意事项

虽然我配置了media,admin后台管理是能上传文件的,而且能显示出来,不过呢。这个文件并不是在你的media代码目录下。而是在执行单元的/home/bae/下面,所以最好用云存储或者自己svn上传。 待补充…

8、OK啦~

经过以上配置,基本环境都OK了,各自模块models.py/ views.py/ urls.py等等配置都是一些基本的。


本文地址 http://www.0kai.net/blog/2014/11/09/2-BAE3.0-Django.html,转载请注明!