雜家雜談 |
|
|||
日歷
統計
導航留言簿(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 ?? 稍等片刻,就可以完成編譯工作了,生成的文件在jython-dev下的dist文件夾下。然后,我將dist下的文件全部拷貝到D:/jython下,我在這里使用的是windows,大家可以根據自己的平臺進行設置。ant ?? 為了能在console里使用Jython,我們還需要將jython目錄下的bin文件夾添加到path。這里大家也可以去google,不再多說?,F在打開一個console,輸入jython,是不是能看到非常熟悉的,python控制臺呢? ?? 3. 好的,現在就需要安裝Django了。 cd?django-dev ?? 安裝完成后,就可以在jython/Lib/site-packages下看到Django了。為了查看是否安裝成功,使用下面的方法。打開控制臺:jython?setup.py?build jython?setup.py?install 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 ?? 這樣就完成了django-jython的安裝。cd django-jython jython setup.py build jython setup.py install ?? 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 ?? 這只是一個非常簡單的原型,說明問題就行了。好,既然使用了Django 1.0那么就要有一些改變,現在的Django使用了newform-admin,那么就在blog目錄下創建admin.py文件,內容如下:?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'] ?1?from?django.contrib?import?admin ?? 這樣就將Entry注冊到了admin site里,就可以在admin page里進行管理了。?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) ?? 再進一步之前,先啟動先前安裝的postgresql,創建database blog。完成之后,就要對項目進行一些配置了。 ?? 首先是djangonjython目錄下的urls.py ?? 取消這幾行的注釋: from?django.contrib?import?admin ?? 為的是能夠訪問到admin page.admin.autodiscover() (r'^admin/(.*)',?admin.site.root), ?? 接著是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?* ?? 然后就要修改項目目錄下的urls.py了,在(r'^admin/(.*)', admin.site.root)之前添加:?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? (r'',?include('djangonjython.blog.urls')), ?? 接著就要添加模板文件了,在blog目錄下創建templates/blog這樣的目錄,然后再里面添加entry_list.html和entry_detail.html兩個文件,內容分別如下:entry_list.html 1?{%?if?entry_list?%} entry_detail.html2?????{%?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?%} 1?{%?if?entry?%} ?? 完成了這些之后,就要告訴django,怎么處理了,也就是要修改settings.py了: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?%} import?os ?? 添加前面兩句,修改后面的TEMPLATE_DIRS,告訴django到哪里去找模板文件。PROJECT_ROOT?=?os.path.abspath(__file__) TEMPLATE_DIRS?=?( ????os.path.join(PROJECT_ROOT,?'blog/templates'), ) ?? 重新啟動服務器,輸入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!
|
![]() |
|
Copyright © glorywine | Powered by: 博客園 模板提供:滬江博客 |