雜家雜談  
          日歷
          統計
          • 隨筆 - 7
          • 文章 - 1
          • 評論 - 15
          • 引用 - 0

          導航

          留言簿(2)

          隨筆分類

          隨筆檔案

          Python

          搜索

          •  

          積分與排名

          • 積分 - 25728
          • 排名 - 1515

          最新評論

          閱讀排行榜

           
          ?? 使用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
          ?? 熟悉的頁面是否出現呢?
          runserver.PNG
          ?? 在觀察一下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上運行的截圖:
          admin_page.PNG
          backend.PNG
          ?? 怎么樣,感覺還是不錯吧。
          ?? 其實,Django on Jython還有很長的路要走,要支持更多的主流數據庫,以及運行效率等問題。不過還是非常期待,希望能夠快速的發展,畢竟Django的開發效率要遠遠高于Java。So let's look forward to it!




          posted on 2008-09-17 00:41 glorywine 閱讀(3721) 評論(0)  編輯  收藏 所屬分類: PythonDjango
           
          Copyright © glorywine Powered by: 博客園 模板提供:滬江博客
          主站蜘蛛池模板: 柯坪县| 萨嘎县| 南昌市| 乌鲁木齐县| 兴安县| 苏尼特右旗| 颍上县| 杭锦旗| 昌邑市| 健康| 锦州市| 沂水县| 河南省| 哈巴河县| 潞西市| 青河县| 花莲市| 静海县| 绥化市| 永春县| 古丈县| 高青县| 友谊县| 棋牌| 永川市| 信丰县| 娄烦县| 华亭县| 昂仁县| 韶关市| 冀州市| 澄江县| 芜湖县| 大港区| 西林县| 庆阳市| 黑龙江省| 汝州市| 台北县| 读书| 古交市|