国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

在Python的Django框架中實現Hacker News的一些功能

2019-11-25 17:42:28
字體:
來源:轉載
供稿:網友

逐步指示

這是提供給更喜歡閱讀的人的視頻文本版本。我們將創建一個類似黑客新聞Reddit的社交新聞網站。它將被稱為“鋼鐵傳聞”,作為一個分享關于“鋼鐵俠”的有趣傳聞和對其進行投票的地方。

屏幕錄像第一部分的概述:

  •     目標
  •     虛擬環境- 從零開始!
  •     模型管理 - 夢想的工作 #78
  •     基本的模板
  •     通用視圖 - 新聞列表視圖和 新聞細節視圖
  •     分頁-免費!!


設置虛擬環境

    我們將用virtualenv virtualenvwrapper來建立一個虛擬開發環境。首先請確認你已經安裝了它們:

    

mkvirtualenv djangorocks

    我在屏幕錄像中使用的是一個叫Xubuntu的變種Ubuntu系統。但你應該能夠在其他的操作系統以最小的改變重復這些步驟。

    安裝 Django (請確認你已經安裝了pip ):
 

  pip install Django==1.5

    你也可以使用 Django 1.5.1. 這些方法和代碼在最新的 Django 版本中沒有測試過能否工作,所以最好按照本教程使用的版本來學習。

創建工程和應用

    創建一個名為steelrumors的工程:
 

復制代碼 代碼如下:

    cd ~/projects
    django-admin.py startproject steelrumors
    cd steelrumors
    chmod +x manage.py

    在你喜愛的編輯器中打開steelrumors/settings.py文件。定位和改變下列內容 (改變用粗體顯示):
       

復制代碼 代碼如下:
'ENGINE': 'django.db.backends.sqlite3'
        'NAME': 'database.db',

        最后 INSTALLED_APPS = ( 'django.contrib.admin',

    接下來,修改steelrumors/urls.py,取消下列行的注釋:
 
    

from django.contrib import admin  admin.autodiscover()     urlpatterns = patterns('',    url(r'^admin/', include(admin.site.urls)),  )

    同步創建管理對象并進入管理詳細資料:

  

 ./manage.py syncdb

    打開一個新標簽或一個新終端并保持服務器實例在運行(不要忘了在這個終端上發布可工作的djangorocks):
 

  ./manage.py runserver

    訪問管理頁 (一般是 http://127.0.0.1:8000/admin/) 并登錄.

    創建鏈接應用:
 

  ./manage.py startapp links

    輸入下面兩個模型類到links/models.py文件中:
 
  

 from django.db import models  from django.contrib.auth.models import User     class Link(models.Model):    title = models.CharField("Headline", max_length=100)    submitter = models.ForeignKey(User)    submitted_on = models.DateTimeField(auto_now_add=True)    rank_score = models.FloatField(default=0.0)    url = models.URLField("URL", max_length=250, blank=True)    description = models.TextField(blank=True)       def __unicode__(self):      return self.title     class Vote(models.Model):    voter = models.ForeignKey(User)    link = models.ForeignKey(Link)       def __unicode__(self):      return "%s upvoted %s" % (self.voter.username, self.link.title)

    建立相應的管理類。輸入下面內容到 links/admin.py 中:
 
   

 from django.contrib import admin  from .models import Link, Vote     class LinkAdmin(admin.ModelAdmin): pass  admin.site.register(Link, LinkAdmin)     class VoteAdmin(admin.ModelAdmin): pass  admin.site.register(Vote, VoteAdmin)

    輸入下面內容到links/views.py:
 
  

 from django.views.generic import ListView  from .models import Link, Vote     class LinkListView(ListView):    model = Link  Insert following lines intosteelrumor/urls.py:   from links.views import LinkListView  ...  urlpatterns = patterns('',    url(r'^$', LinkListView.as_view(), name='home'),

    建立一個新的模板文件夾,在steelrumors/templates/links/link_list.html中輸入下面內容:
 
    

<ol>  {% for link in object_list %}    <li>    <a href="{{ link.url }}">     <b>{{ link.title }}</b>    </a>    </li>  {% endfor %}  </ol>

    編輯settings.py,添加你的兩個應用到INSTALLED_APPS = (的尾部:
  

  'links',  'steelrumors',  )

    同步建立鏈接對象,并在管理界面里輸入一些數據:
  
 

  ./manage.py syncdb

 添加品牌

    建立一個通用基本模板steelrumors/templates/base.html:
 
   

 <html>  <body>  <h1>Steel Rumors</h1>     {% block content %}  {% endblock %}     </body>  </html>

    修改steelrumors/templates/links/link_list.html,用這種方式把原先代碼包裹起來:

    

   {% extends "base.html" %}     {% block content %}  ...  {% endblock %}

投票數模型管理器

    我們需要在我們的通用ListView中添加一個計票數。添加這些到 links/models.py:
 
 

  from django.db.models import Count     class LinkVoteCountManager(models.Manager):    def get_query_set(self):      return super(LinkVoteCountManager, self).get_query_set().annotate(        votes=Count('vote')).order_by('-votes')  Insert these two lines into the Link class inlinks/models.py:   class Link(models.Model):  ...       with_votes = LinkVoteCountManager()    objects = models.Manager() #default manager

    編輯 links/views.py,添加這兩行到LinkListView類中:
   
   

 class LinkListView(ListView):  ...       queryset = Link.with_votes.all()    paginate_by = 3

狂歡(作弊)

您可以在django shell中用下面的行給隨機的標題添加100個選票數:
 

$ ./manage.py shell>>> from links.models import Link>>> for i in xrange(100): Vote(link=Link.objects.order_by('?')[0],voter=a).save()

最終評論

或許你想知道這個網站的這個版本是否有用,我想說,它作為私人測試版是工作不錯的。任何新用戶都必須通過管理界面手動添加。如果想讓他們登陸管理界面,他們必須是員工。員工可以通過手動創建投票對象來進行投票。

站點面向大眾的部分仍能顯示來自員工投票率最高的傳聞?;谌绾卧O計好的模板的問題,這個版本也可以用來獲取對網站的設計和品牌的反饋。

總結完第一部分。想得到隨后部分的更新,請在Twitter上粉我一個@arocks。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 景洪市| 沁阳市| 邓州市| 长兴县| 兴安盟| 名山县| 新竹县| 新丰县| 讷河市| 卢龙县| 凤城市| 增城市| 武鸣县| 衡东县| 池州市| 温宿县| 乳源| 青神县| 安庆市| 杂多县| 习水县| 平山县| 六枝特区| 山东省| 邵阳市| 柘城县| 邵东县| 白城市| 宜州市| 长武县| 旺苍县| 田东县| 辽宁省| 江都市| 玉门市| 新闻| 桃江县| 惠州市| 玉田县| 晋城| 古蔺县|