日历
统计
- 随笔 - 7
- 文章 - 1
- 评论 - 15
- 引用 - 0
导航
留言簿(2)
随笔分类
随笔档案
Python
搜索
积分与排名
最新评论
阅读排行榜
|
使用Django已经一段时间了,非常喜欢这样的状态,很少的配置文件和代码,就可以样一个原型跑起来。1.0已经发布一段时间了,有了很多的改变,改进,很吸引眼球。但是还有一个特性非常吸引我,Django可以运行在Jython上了,这就意味着,可以在Tomcat,Glassfish等服务器上跑Django了,EXCITING?
OK, Let's give a shot!
1. of course, 先要现在Django, 不过我还是推荐使用svn中的代码。 svn co http://code.djangoproject.com/svn/django/trunk/ django-dev 2. 接着就要下载Jython了,当前的stable版本是2.2.1,而我们需要的是2.5,该版本还是alpha阶段,所以,还是从svn中获取。
svn co https://jython.svn.sourceforge.net/svnroot/jython/trunk/jython/ jython-dev 完成了Jython的检出,开始编译工作。需要指出的是,我们在这里使用ant来构建Jython,当然,也可以选择maven,看个人习惯了,ant和maven的具体安装方法大家可以去google,这里不再累述。
cd jython-dev ant 稍等片刻,就可以完成编译工作了,生成的文件在jython-dev下的dist文件夹下。然后,我将dist下的文件全部拷贝到D:/jython下,我在这里使用的是windows,大家可以根据自己的平台进行设置。 为了能在console里使用Jython,我们还需要将jython目录下的bin文件夹添加到path。这里大家也可以去google,不再多说。现在打开一个console,输入jython,是不是能看到非常熟悉的,python控制台呢? 3. 好的,现在就需要安装Django了。
cd django-dev jython setup.py build jython setup.py install 安装完成后,就可以在jython/Lib/site-packages下看到Django了。为了查看是否安装成功,使用下面的方法。打开控制台:
D:\>jython Jython 2.5a3+ (trunk, ???? 16 2008, 18:50:22) [Java HotSpot(TM) Client VM (Sun Microsystems Inc.)] on java1.6.0_10-beta Type "help", "copyright", "credits" or "license" for more information. >>> import django >>> django.get_version() u'1.0-post-release-SVN-SVN-unknown' 如果看到了最后的输出就表示安装成功了。 4. 当前Django on Jython只支持postgresql,所以,我们这里还需要下载一个Lib,Django-Jython.
svn co http://django-jython.googlecode.com/svn/trunk/ django-jython cd django-jython jython setup.py build jython setup.py install
这样就完成了django-jython的安装。 5. 最后就是安装postgresql数据库了,大家可以根据官方的文档进行安装。
万事俱备,让我们开始真正的Django on Jython之旅吧。 这里还需要说明一点,在完成Django的安装之后,在jython/bin下会有一个django-admin.py,这个是Django命令的工具,为了同CPython下的Django进行区别,我在这里将其重命名为django-admin-jy.py。 好,切换到工作目录。
django-admin-jy.py startproject djangonjython 是不是有djangonjython这个目录出现呢?对了,这就是我们创建的工程。 如果你是一个急性子,那么就让我们尝试一下,看看是不是能够运行呢?
cd djangonjython jython manage.py runserver 熟悉的页面是否出现呢?
在观察一下djangonjython目录里的文件,哈,没有了.pyc,改成了.class,确实是jython在工作了。 如果只是运行这么一个东西,肯定就没有什么价值了。OK,let's build an application。我们在这里创建一个简单的blog(老生常谈了:))。
jython manage.py startapp blog 这样就完成了app的创建,当然在djangonjython下应该多了一个blog文件夹,里面还包含了一些文件。 首先修改models.py,内容如下:
1 from django.db import models 2 from django.contrib.auth.models import User 3 4 class Entry(models.Model): 5 STATUS_CHOICES = ( 6 (0, 'live'), 7 (1, 'draft'), 8 (2, 'cancel'), 9 ) 10 author = models.ForeignKey(User) 11 title = models.CharField(max_length=255) 12 slug = models.SlugField() 13 content = models.TextField() 14 create_at = models.DateTimeField(auto_now_add=True) 15 status = models.IntegerField(default=0, choices=STATUS_CHOICES) 16 17 def __unicode__(self): 18 return self.title 19 20 def get_absolute_url(self): 21 return '/blog/%s' % (self.slug) 22 23 class Meta: 24 ordering = ['-create_at'] 这只是一个非常简单的原型,说明问题就行了。好,既然使用了Django 1.0那么就要有一些改变,现在的Django使用了newform-admin,那么就在blog目录下创建admin.py文件,内容如下:
1 from django.contrib import admin 2 3 from djangonjython.blog.models import Entry 4 5 class EntryAdmin(admin.ModelAdmin): 6 list_display = ('title', 'author', 'create_at', 'status',) 7 ordering = ['-create_at'] 8 list_filter = ('author', 'status',) 9 prepopulated_fields = {'slug': ('title',),} 10 11 admin.site.register(Entry, EntryAdmin) 这样就将Entry注册到了admin site里,就可以在admin page里进行管理了。 再进一步之前,先启动先前安装的postgresql,创建database blog。完成之后,就要对项目进行一些配置了。 首先是djangonjython目录下的urls.py 取消这几行的注释:from django.contrib import admin admin.autodiscover()
(r'^admin/(.*)', admin.site.root), 为的是能够访问到admin page. 接着是settings.py,DATABASE_ENGINE = 'doj.backends.zxjdbc.postgresql' # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. DATABASE_NAME = 'blog' # Or path to database file if using sqlite3. DATABASE_USER = 'yourname' # Not used with sqlite3. DATABASE_PASSWORD = 'yourpassword' # Not used with sqlite3. DATABASE_HOST = '' # Set to empty string for localhost. Not used with sqlite3. DATABASE_PORT = '' # Set to empty string for default. Not used with sqlite3.
INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.admin', 'djangonjython.blog', 'doj', )
对上面的代买进行一些说明: doj.backends.zxjdbc.postgresql是之前安装的django-jython提供的数据支持,当然,要使用这个,必须将doj这个库添加到PYTHONPATH中,所以在下面的INSTALLED_APPS里,加入了doj,而djangonjyton.blog就是之前创建的app。 好,完成了这些,就可以开始数据库的创建了。熟悉的命令:
jython manage.py syncdb 按照上面的提示,一步一步的进行填写。完成之后,启动服务,是不是又是一个熟悉的画面? 填写之前要求的管理员用户名和密码,就进入到了admin page,我习惯称后台管理页面。 好了,在这里就可以添加一些entry了。完成了后台的管理,让我们添加一些前台的显示吧。 在这里,我打算使用django自带的generic views,使用起来非常的简单。为了同项目的urls.py区别开,在blog下创建一个新的urls.py,内容如下:
1 from django.conf.urls.defaults import * 2 3 from djangonjython.blog.models import Entry 4 5 entry_dict = { 6 'queryset': Entry.objects.all(), 7 'template_object_name': 'entry', 8 } 9 10 urlpatterns = patterns('django.views.generic.list_detail', 11 (r'^blog/$', 'object_list', entry_dict), 12 (r'^blog/(?P<slug>.*)/$', 'object_detail', entry_dict), 13 ) 14 然后就要修改项目目录下的urls.py了,在(r'^admin/(.*)', admin.site.root)之前添加:
(r'', include('djangonjython.blog.urls')), 接着就要添加模板文件了,在blog目录下创建templates/blog这样的目录,然后再里面添加entry_list.html和entry_detail.html两个文件,内容分别如下: entry_list.html
1 {% if entry_list %} 2 {% for entry in entry_list %} 3 <a href="/blog/{{ entry.slug }}"><h3>{{ entry.title }}</h3></a> Post at: {{ entry.create_at|date:"Y-b-d" }}<hr/> 4 {% endfor %} 5 {% endif %} entry_detail.html
1 {% if entry %} 2 <span style="color: green;">{{ entry.title }}</span><br/><br/> 3 post by: <b>{{ entry.author.username }}</b><br/><br/> 4 <div style="color: blue">{{ entry.content|safe }}</div> 5 {% endif %} 完成了这些之后,就要告诉django,怎么处理了,也就是要修改settings.py了:
import os PROJECT_ROOT = os.path.abspath(__file__) TEMPLATE_DIRS = ( os.path.join(PROJECT_ROOT, 'blog/templates'), ) 添加前面两句,修改后面的TEMPLATE_DIRS,告诉django到哪里去找模板文件。 重新启动服务器,输入http://localhost:8000/blog/,就可以看到一个简单的blog列表了,如果有的话。点击相应的标题,就会进入到具体的entry了。 到这里位置,一个简单的blog就算是创建好了。我们的目的主要是要看他在其他的服务器上是否能够运行,好的,这里就要进行打包处理了。 django-jython提供了一个war命令,会将我们的工程打包成war包,方便部署。不过django-jython有一个小小的bug。找到jython/Lib/site-packages/doj/manamgement/commands/war.py,在该文件的第228行,原来是:
if dest_relative_path[-1] == '/': 现在我们要将其改为:
if dest_relative_path[-1] == os.path.sep: 因为在windows下得到的是'\\'而不是'/',所以执行的时候会出错,可能开发者没有在windows下进行测试,所以出现了这样的情况。 接着,我们需要链接postgresql的jdbc包,大家可以在这里下载postgres-jdbc。下载后,将其放在项目目录下,开始打包:
jython manage.py war --include-java-libs=./postgresql-8.3-603.jdbc4.jar 过一段时间,就可以在项目的上一级目录看到djangonjython.war 到这里,java程序员就可以使用熟悉的java web server进行部署了!部署完成后,输入http://localhost:8080/djangonjython/blog/就可以进行访问了。 这里给出一些在tomcat上运行的截图: 怎么样,感觉还是不错吧。 其实,Django on Jython还有很长的路要走,要支持更多的主流数据库,以及运行效率等问题。不过还是非常期待,希望能够快速的发展,毕竟Django的开发效率要远远高于Java。So let's look forward to it!
|