Page Actions
Wiki Actions
User Actions
Submit This Story

Windows里折腾Django,XAMPP,SQLServer

最近楞是想往Windows里搭个django, DB用SQLServer 2ksp4. App Server用XAMPP的Apache,折腾了一下终于搭起来了…

环境选择

Python 机器上装的是2.6系的最新版,django用最近的release. Xampp用最新release; 稍微调查了下,发现数据库连接用pyodbc比较靠谱, 配上django-pyodbc正合适。 所以环境就是如此了:

  • xampp: 1.7.3
  • Python: 2.6.5
  • django: 1.1
  • pyodbc: trunk
  • django-pyodbc: trunk

其实按照Django自己的说法,用svn trunk也没什么问题的。

数据库配置

既然是odbc模式,自然要在Windows host配置好odbc连接SQL Server 数据库。 django项目的settings.py是这样写的:

    DATABASE_ENGINE = 'sql_server.pyodbc'
    DATABASE_NAME = 'db_name'       # 数据库名           
    DATABASE_USER = 'sa'            # 用户名
    DATABASE_PASSWORD = ''          # 密码
    DATABASE_HOST = ''              
    DATABASE_PORT = ''              
    DATABASE_OPTIONS= {
        'driver': 'SQL Server',
        'MARS_Connection': True,    # ODBC支持MARS Connection
        'dsn': 'test',              # 你在odbc里连接的dns

Web Server 配置

我用的是xampp的apache + mod_wsgi 项目目录被我放到了xampp目录下,按照Django doc的推荐,项目内建了一个apache目录.大致结构如下:

C:\-----xampp
   |
   +----myproject
     |
     +----apache
     | |
     | +--django.wsgi
     |
     |---settings.py
     |
     |---__init.py__, menage.py, urls.py... 

整个项目位于域名的myproject子目录。apache的httpd.conf里把wsgi的脚本路径写上:

WSGIScriptAlias /myproject "C:/xampp/myproject/apache/django.wsgi"

<Directory "D:/xampp/bizquery">
	Order deny,allow
	Allow from all
</Directory>

注意我用的是”/”, 即便是Windows的Apache也是如此表达路径,且不要忘了双引号。
既然系统是Windows,所以访问控制就全靠apache了

静态内容hosting

这个是比较麻烦的,Django doc推荐其他的web server专门host静态文件。现在既然是XAMPP了,就一起host了吧。 我的目录结构里再加了一个静态文件目录”static”, 下面有一个media目录,其中img目录放图像;js放javascript(赛个jQuery嘛~~), uploads放上传文件,styles放css, 结构如下:

C:\-----xampp
   |
   +----myproject
     |
     +----apache
     | |
     | +--django.wsgi
     |
     |---settings.py
     |
     |---__init.py__, menage.py, urls.py... 
     |
     +----static
       |
       |----media
       | |
       | |--img
       | |
       | |--uploads 
       | |
       | +--js
       |
       |
       +--styles

相应的httpd.conf里面加上这些内容:

Alias /myproject/favicon.ico "C:/xampp/myproject/static/media/favicon.ico"

AliasMatch /([^/]*\.css) "C:/xampp/myproject/static/styles/$1"

Alias /myproject/media/ "C:/xampp/myproject/static/media/"
Alias /myproject/uploads/ "C:/xampp/myproject/static/uploads/"


<Directory "D:/xampp/bizquery/static">
Order deny,allow
Allow from all
</Directory>

这同样参考了参考Django doc: favicon专门对待, css用AliasMatch正则穷举, media对应/media。

再把settings.py的MEDIA_ROOT和MEDIA_URL对应的设置好:

MEDIA_ROOT = 'D:/xampp/bizquery/static/media/'
MEDIA_URL = 'http://myhost.com/myproject/media/'

这样对于上传的文件model,即可指定上传路径:

class File(models.Model):
    name = models.CharField(max_length=64, verbose_name='文件名称')
    path = models.FileField(upload_to="files/%Y/%m/%d",  blank=True, null=True, verbose_name='文件'
    ...

在Admin Interface里就可以上传文件了。

后记和问题

测试环境

建议再留个sqlite 数据库配置测试用,sqlite是很好用的prototyping工具,不论你在什么数据库上做东西。sqlite数据库文件可以进版本管理系统,DB文档和脚本都省了LOL! 我的配置文件里就有:

import os
HOST_NAME = socket.gethostname()
if HOST_NAME != 'testing PC':
    #....你的正常配置....
else:
    DATABASE_ENGINE = 'sqlite3'
    DATABASE_NAME = 'myproject.sqlite3'

既然settings是一个py,这里判断一把hostname来依据机器名来设置不同的配置。不光数据库,MEDIA_ROOT,MEDIA_URL之类统统都可以这样都写好。

Windows文件名问题

在Admin Interface里上传文件遇到个问题,就是上传中文文件名或者任何非拉丁文件名的文件,
admin的url并没有quote成”%A%B%X…“的形式,我也不知道哪里有设置,也许开发者忽视了. 目前没有解决,可能要hack一下…admin interface拿来直接用还是会有问题的…

此外,windows 2003 server的文件名是gb13810的,而我的django项目是纯utf-8.当中还要经过一次转码。 不过这个问题倒是好办,看你的静态文件hoster怎么设置了,apache的话就直接

AddDefaultCharset utf-8

应该就可以了… Windows目前我唯一不爽的就是没有一个Linux那样的utf-8环境。有空可以开始在Windows上做web了…

还有…SQLServer支持foreign_key…慎用…你完全可以model里用foreign_key而真实的数据库里把constraints删掉…我倒是希望像SQLite那样默认不支持…

Discussion

Enter your comment
 
 
blog/2010/05/django_xampp_sqlserver.txt · Last modified: 2010/05/25 04:34 by MeaCulpa     Back to top
Recent changes RSS feed Creative Commons License Powered by PHP Driven by DokuWiki