激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - 在Python的Django框架中實現Hacker News的一些功能

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

2020-06-08 10:23腳本之家 Python

這篇文章主要介紹了在Python的Django框架中實現Hacker News的一些功能,包括投票“頂”評論等功能,需要的朋友可以參考下

逐步指示

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

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

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


設置虛擬環境

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

    

?
1
mkvirtualenv djangorocks

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

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

?
1
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,取消下列行的注釋:
 
    

?
1
2
3
4
5
6
from django.contrib import admin
  admin.autodiscover()
   
  urlpatterns = patterns('',
    url(r'^admin/', include(admin.site.urls)),
  )

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

  

?
1
./manage.py syncdb

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

?
1
./manage.py runserver

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

    創建鏈接應用:
 

?
1
./manage.py startapp links

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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 中:
 
   

?
1
2
3
4
5
6
7
8
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:
 
  

?
1
2
3
4
5
6
7
8
9
10
11
12
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中輸入下面內容:
 
    

?
1
2
3
4
5
6
7
8
9
<ol>
  {% for link in object_list %}
    <li>
    <a href="{{ link.url }}">
     <b>{{ link.title }}</b>
    </a>
    </li>
  {% endfor %}
  </ol>

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

?
1
2
3
'links',
'steelrumors',
)

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

?
1
./manage.py syncdb

 添加品牌

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

?
1
2
3
4
5
6
7
8
9
<html>
 <body>
 <h1>Steel Rumors</h1>
  
 {% block content %}
 {% endblock %}
  
 </body>
 </html>

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

    

?
1
2
3
4
5
{% extends "base.html" %}
 
{% block content %}
...
{% endblock %}

投票數模型管理器

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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類中:
   
   

?
1
2
3
4
5
class LinkListView(ListView):
 ...
  
   queryset = Link.with_votes.all()
   paginate_by = 3

狂歡(作弊)

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

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

最終評論

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

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 性毛片视频 | 蜜桃视频在线观看免费 | 亚洲成人欧美 | 国产午夜精品理论片a级探花 | 免费看一级毛片欧美 | 亚洲精品午夜在线 | 国产精品久久久久久久久粉嫩 | 精品国产乱码一区二区 | 久久91久久久久麻豆精品 | 久久久精品视频免费看 | 在线a毛片 | 斗破苍穹在线免费 | 国产精品久久久久久久不卡 | 美女又黄又www | 国产九九热 | www中文在线 | 成人在线观看免费视频 | 日本在线免费观看视频 | 99爱视频在线 | 久草在线播放视频 | 国产亚洲精品久久久久婷婷瑜伽 | 国产1区2区3区中文字幕 | 13一14毛片免费看 | 第一区免费在线观看 | 久在线播放 | 久久综合一区 | 国产1区2区在线 | 欧美成人一级片 | 亚欧美一区二区 | 国产亚洲精品久久久久5区 男人天堂免费 | 亚洲成人入口 | 中文字幕欧美亚洲 | 午夜视频免费播放 | 日本不卡一区在线观看 | 久久精品视频7 | 欧美色爱综合 | 少妇av片| 成人做爰高潮片免费视频韩国 | 亚洲国产成人久久一区www妖精 | 看国产一级毛片 | 369看片你懂的小视频在线观看 |