真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

實(shí)戰(zhàn)Django:LiveBlog

《Django Web開(kāi)發(fā)指南》的實(shí)例講的差不多了,除了今天要介紹的LiveBlog,還有一個(gè)Pastebin。這樣,書(shū)中的實(shí)例基本講完了。做完這些實(shí)例之后,舍得建議回頭看看這本書(shū),或許你會(huì)從書(shū)中找到舍得所講的實(shí)例里忽略掉的一些細(xì)節(jié)。此外,《Django Web開(kāi)發(fā)指南》中有幾個(gè)章節(jié)是關(guān)于Django的基礎(chǔ)或高級(jí)技術(shù)的,建議閱讀并設(shè)法把它應(yīng)用到你所練習(xí)過(guò)的實(shí)例中。

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)公司!專(zhuān)注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、成都小程序開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了下花園免費(fèi)建站歡迎大家使用!

正如你已經(jīng)看到的,Django提供了豐富的內(nèi)置功能,你可以很輕松地用這些功能來(lái)完成很多工作。但和所有的工具一樣,Django也不是萬(wàn)能的,它缺乏的最明顯的一個(gè)Web功能就是沒(méi)有集成Ajax,即異步JavaScript和XML。
在這個(gè)實(shí)例中,我們要展示一個(gè)相對(duì)簡(jiǎn)單的Ajax應(yīng)用,即“l(fā)iveblog"。liveblog是一個(gè)列出了一系列簡(jiǎn)短的,帶時(shí)間戳的條目的網(wǎng)頁(yè),它能進(jìn)行自動(dòng)更新,而無(wú)須你去刷新頁(yè)面。

1.創(chuàng)建項(xiàng)目和應(yīng)用


我們先來(lái)創(chuàng)建本實(shí)例的項(xiàng)目,在dos命令提示符下轉(zhuǎn)到Scripts文件夾(如“c:\python32\Scripts”),然后運(yùn)行如下命令:

$ django-admin startproject liveproject

然后在dos命令提示符下繼續(xù)輸入如下命令,進(jìn)入項(xiàng)目文件夾:

cd liveproject

接下來(lái)開(kāi)始創(chuàng)建應(yīng)用,在dos命令提示符下輸入命令:

$ python manage.py startapp liveblog

命令執(zhí)行完后,項(xiàng)目根文件夾下會(huì)出現(xiàn)一個(gè)叫l(wèi)iveblog的文件夾,應(yīng)用創(chuàng)建完畢。

2.建立模型


編輯liveblog/models.py文件,改成下面這樣:

liveblog/models.py:

from django.db import modelsimport datetime
class Update(models.Model):
    timestamp= models.DateTimeField(default=datetime.datetime.now)
    text= models.TextField()
    
class Meta:
        ordering= ['-id']

def __str__(self):
return "[%s] %s" % (
            self.timestamp.strftime("%Y-%m-%d %H:%M:%S"),
            self.text
        )
3.激活模型

首先修改liveproject/settings.py這個(gè)文件,找到INSTALLED_APPS這段設(shè)置,把它改成下面這個(gè)樣子:

liveproject/settings.py:

INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'liveblog',
)

編輯settings.py的時(shí)候,建議順便修改一下語(yǔ)言和時(shí)區(qū)的設(shè)置,具體的方法請(qǐng)參考:《實(shí)戰(zhàn)Django:官方實(shí)例Part1》

此外,找到文件中的:

USE_TZ = True

把它改為:

USE_TZ = False

然后在dos命令提示符下運(yùn)行如下命令:

$ python manage.py makemigrations liveblog

繼續(xù)在dos命令提示符下運(yùn)行命令:

$ python manage.py migrate

這樣,數(shù)據(jù)庫(kù)就建好了。

4.創(chuàng)建管理員賬號(hào)

在dos命令提示符下運(yùn)行如下命令:

$ python manage.py createsuperuser

然后依次輸入admin,你的郵箱,輸入兩次密碼,完成創(chuàng)建管理員的操作。

5.在管理界面注冊(cè)應(yīng)用

編輯liveblog/admin.py 文件,讓它變成下面這個(gè)樣子:

liveblog/admin.py

from django.contrib import adminfrom liveblog.models import Update

admin.site.register(Update)

6.啟動(dòng)服務(wù)器


在dos命令提示符下運(yùn)行如下命令:

$ python manage.py runserver
服務(wù)器啟動(dòng)成功后,打開(kāi)瀏覽器,在地址欄內(nèi)輸入:
http://127.0.0.1:8000/admin/

然后輸入你剛才創(chuàng)建的管理員賬號(hào)和密碼,登錄管理界面,你會(huì)看到下面這樣的畫(huà)面:

實(shí)戰(zhàn)Django:LiveBlog

7.添加內(nèi)容


點(diǎn)擊Updates后面的“增加”按鈕,然后在”增加update“頁(yè)面的Text文本框中輸入些內(nèi)容,比如”我的第一條消息“:

實(shí)戰(zhàn)Django:LiveBlog

輸入完畢后點(diǎn)擊”保存“按鈕。

8.編寫(xiě)視圖

接下來(lái)我們開(kāi)始編寫(xiě)視圖,編輯liveblog/views.py 文件,添加下面的內(nèi)容:

liveblog/views.py

from django.views import generic
from liveblog.models import Update
class IndexView(generic.ListView):
    template_name= 'liveblog/update_list.html'
    def get_queryset(self):
return Update.objects.all()

我們只寫(xiě)了一個(gè)簡(jiǎn)單的首頁(yè)視圖,這個(gè)視圖中的get_queryset方法甚至可以去掉,直接加入model=Update,也能實(shí)現(xiàn)同樣的效果。

9.編寫(xiě)模板


首先創(chuàng)建模板文件夾,在liveblog文件夾下建立templates文件夾,然后在templates下再建一個(gè)liveblog文件夾。

隨后我們?cè)谶@個(gè)文件夾下建立update_list.html文件,這個(gè)update_list.html文件的正確路徑應(yīng)該是:

liveblog/templates/liveblog/update_list.html

編輯update_list.html文件,加入如下內(nèi)容:

liveblog/templates/liveblog/update_list.html:


    
        Liveblog
        
            div.update{padding: 8 1.5em; }
                div.even{ background: #ddd; }
            div.timestamp{ float: left; font-weight: bold; }
            div.text{ float: left; padding-left: 10px; }
            div.clear{ clear: both; height: 1px; }
            body{ padding: 0 2em; font-family: Microsoft Yahei,sans-serif; background: #fff; }
            h2{ background: #1E2933; padding: 15 0.8em; margin: 0;  color:#fefefe; }
            p{ background: #3776AB; padding: 15 2em; margin: 0;  color:#fefefe;  font-size:12px; }
        
    
    
        

Liveblog

本頁(yè)面會(huì)每隔15秒自動(dòng)更新一次——請(qǐng)不要 手動(dòng)刷新頁(yè)面!

{% if object_list %} {% for object in object_list %} {{ object.timestamp|date:"Y-m-d H:i:s" }}
{{ object.text|linebreaksbr }}
{% endfor %} {% else %}

暫無(wú)更新 - 請(qǐng)稍后重試!

{% endif %}

10.設(shè)計(jì)URL


liveblog文件夾下創(chuàng)建一個(gè)叫url.py的文件,然后添加如下內(nèi)容:

liveblog/urls.py

from django.conf.urls import patterns, include, urlfrom liveblog import views


urlpatterns= patterns('',
    url(r'^$', views.IndexView.as_view(), name='index'),
    )

編輯liveproject/urls.py 文件,讓它變成下面這樣:

liveproject/urls.py

from django.conf.urls import patterns, include, urlfrom django.contrib import admin

urlpatterns= patterns('',
    url(r'^admin/', include(admin.site.urls)),
    url(r'^live/', include('liveblog.urls')),
)

我們來(lái)看一下首頁(yè),訪問(wèn)http://127.0.0.1:8000/live/:

實(shí)戰(zhàn)Django:LiveBlog

現(xiàn)在,應(yīng)用看上去已經(jīng)做好了——但是,說(shuō)好的”ajax”呢?我們接下來(lái)給頁(yè)面加入Ajax功能,讓它能幫助我們實(shí)現(xiàn)自動(dòng)更新。

11.加入Ajax


實(shí)際上來(lái)說(shuō),網(wǎng)站“實(shí)現(xiàn)Ajax”主要包含了以下三個(gè)主要任務(wù)。

首先我們得先下載一個(gè)Ajax庫(kù),我們選擇了當(dāng)下比較流行的Jquery庫(kù),這是官方的下載地址:http://code.jquery.com/jquery-2.1.1.min.js,你也可以呆會(huì)直接下載我們的源代碼包,那里已經(jīng)給你準(zhǔn)備好了這個(gè)文件。

下載好jquery后,在項(xiàng)目根文件夾下建立一個(gè)media文件夾,然后再在其下建立一個(gè)js文件夾,將jquery-2.1.1.min.js文件放到j(luò)s文件夾下,這樣,文件夾的結(jié)構(gòu)會(huì)是下面這個(gè)樣子:

liveproject/
    manage.py
    liveproject/
    liveblog/
    media/
        js/
        jquery-2.1.1.min.js

接下來(lái)我們要修改模板,把下面的代碼加入到”“和””之間:

liveblog/templates/liveblog/update_list.html:

        
        
            function update() {
                update_holder= $("#update-holder");
                most_recent= update_holder.find("div:first");
                $.getJSON("updates-after/" + most_recent.attr('id')+ "/",
           function(data) {
                        cycle_class= most_recent.hasClass("odd")
                   ? "even" :"odd";
                        jQuery.each(data,function() {
                            update_holder.prepend('
' + this.fields.timestamp.replace('T',' ') + '
' + this.fields.text + '
' ); cycle_class= (cycle_class== "odd") ? "even" :"odd"; }); } ); } $(document).ready(function() { setInterval("update()",15000); })

然后我們編輯liveblog/views.py 文件,讓它變成下面這樣:

liveblog/views.py

from django.http import HttpResponsefrom django.core import serializersfrom django.views import generic
from liveblog.models import Update

def updates_after(request, id):
    response= HttpResponse()
    response['Content-Type'] = "text/javascript"
    response.write(serializers.serialize("json", Update.objects.filter(pk__gt=id)))
return response
class IndexView(generic.ListView):
    template_name= 'liveblog/update_list.html'
    def get_queryset(self):
return Update.objects.all()

這里我們利用了Django內(nèi)置的序列化庫(kù),把模型對(duì)象轉(zhuǎn)換成json格式,再把它寫(xiě)到HttpRespose里去。最后,要讓JavaScript能正確解析和使用響應(yīng)的正文,還需要在響應(yīng)里設(shè)置Content-Type頭。

最后需要修改URL模式,編輯liveblog/urls.py 文件,讓它變成下面這樣:

liveblog/urls.py

from django.conf.urls import patterns, include, urlfrom liveblog import views


urlpatterns= patterns('',
    url(r'^$', views.IndexView.as_view(), name='index'),
    url(r'^updates-after/(?P\d+)/$', views.updates_after, name='updates_after'),
    )

編輯liveproject/urls.py 文件,讓它變成下面這樣:

liveproject/urls.py

from django.conf.urls import patterns, include, urlfrom django.contrib import admin

urlpatterns= patterns('',
    url(r'^admin/', include(admin.site.urls)),
    url(r'^live/', include('liveblog.urls')),
    url(r'^(?P.*)', 'django.views.static.serve'),
)

做完上述工作后,我們可以去測(cè)試一下,先刷新一下瀏覽器,然后到后臺(tái)新增一個(gè)update,比如叫”我的第二條消息“,回到首頁(yè)(http://127.0.0.1/live/),不要刷新頁(yè)面,觀察新添加的內(nèi)容有無(wú)被自動(dòng)刷新。

 

附:本實(shí)例源代碼下載地址:舍得學(xué)苑下載中心

 

【The End】

本文版權(quán)歸舍得學(xué)苑所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明作者和出處。謝謝!
作者:舍得
首發(fā):舍得學(xué)苑@博客園

 

新聞標(biāo)題:實(shí)戰(zhàn)Django:LiveBlog
URL網(wǎng)址:http://weahome.cn/article/gioesj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部