设为首页 收藏本站
查看: 545|回复: 0

[经验分享] 用 Python + django 10分鐘內作出一個 blog

[复制链接]

尚未签到

发表于 2017-5-8 10:22:32 | 显示全部楼层 |阅读模式
  在 Ruby on Rails 的官方網站上有 15 分鐘作出一個 weblog 的 screencast,的確 demo 了 RoR 開發的快速。不過萬萬不可太迷信只有 RoR 能這麼神速,根據最近擠出一點時間看 django 的東西後,我也想先來作個「10分鐘做出 blog 的挑戰」。(由於還不太會用製作 screen cast 的軟體,所以只能用文字介紹..)這篇文章只是描述一下建構過程,所以不會介紹 django 環境的安裝設定,請讀者見諒。
  稍微簡介一下 django,它是一個基於 Python 語言的 Web 開發框架(framework)。
建立 project 及 app
  在 django 的環境裡,一個 project 裡可以有很多個 application,如此一來同一個 project 下的 application 便能共用同一套環境設定。所以我們先在命令列下執行 django-admin.py 來建立一個 project:

  先來改一下 demo/settings.py 的設定,裡面設定我們會用 sqlite3 來作資料庫的引擎,然後產生一個 demo.db 的檔案來當資料庫,再設定一些時區及 template 目錄等:



DATABASE_ENGINE = 'sqlite3'
DATABASE_NAME = 'demo.db'
...
TIME_ZONE='Asia/Taipei'
LANGUAGE_CODE='zh-tw'
...
TEMPLATE_DIRS = (
  ...
  '.',
)
INSTALLED_APPS = (
  'django.contrib.admin',
  ..
  'demo.blog',  # 等一下就會產生
)


  然後在 demo 目錄下建立一個 blog 的 app:

  然後在 demo/blog/models.py 裡建立需要的 model(DB Table):



from django.db import models
class Category(models.Model):
  name = models.CharField(max_length=32)
  def __unicode__(self):
    return self.name
  class Admin:
    pass
class Article(models.Model):
  title         = models.CharField(max_length=64)
  published_at  = models.DateTimeField('date published')
  content       = models.TextField()
  category      = models.ForeignKey(Category)
  def __unicode__(self):
    return self.title
  class Admin:
    pass


  然後可以看看 django 產生的 SQL DDL,確定的話就用 syncdb 來建立資料庫表格:

  其中會要求你建立一個管理者帳號,這是為了之後進管理介面發表文章使用的帳號。完成這些動作之後,修改一下 demo/urls.py 的內容:



from django.conf.urls.defaults import *
urlpatterns = patterns('',
  (r'^blog/', include('demo.blog.urls')),
  (r'^admin/', include('django.contrib.admin.urls')),
)


  先在 demo/blog/ 下建立一個 urls.py 的檔案,然後在命令列下輸入 python manage.py runserver,再打開瀏覽器輸入網址 http://localhost:8000/admin/ 馬上就有一個後台介面可以使用了呀!


發表文章的介面還蠻好用的呢  登入後你就可以直接建立 Category 及 Artical 的內容,這不就是一個現成的文章發表介面了嗎?一開始操作到現在不會超過5分鐘吧!
文章列表、單篇文章
  可以發表文章之後,當然是要能夠瀏覽呀,所以我們馬上打開 demo/blog/urls.py 這個檔案,然後貼上下列的 code:



from django.conf.urls.defaults import *
from demo.blog.models import Article
info_dict = {
  'queryset': Article.objects.all(),
}
urlpatterns = patterns('',
    (r'^$', 'django.views.generic.list_detail.object_list', info_dict),
    (r'^(?P<object_id>\d+)/$', 'django.views.generic.list_detail.object_detail', info_dict),
)


  然後再分別建立 demo/blog/article_list.html 及 demo/blog/article_detail.html 這兩個檔案,分別表示文章列表及文章內容:
  article_list.html:



{% if object_list %}
  {% for article in object_list %}
    <div class="article">
      <div class="title"><a href="/blog/{{ article.id }}">{{ article.title }}</a></div>
    </div>
  {% endfor %}
{% else %}
  <p>對不起沒有文章喔!</p>
{% endif %}


  article_detail.html:



<div class="article">
  <div class="title">標題: {{ object.title }}</div>
  <div class="pub_date">{{ object.published_at }}</div>
  <div class="content">{{ object.content }}</div>
  <div class="category">發表於: {{ object.category.name }}</div>
</div>
<p><a href="/admin/blog/article/{{ object.id }}">修改</a></p>
<p><a href="/blog">BACK</a></p>


  這樣很快就弄出一個很像樣的 blog (只是不能留言 XD),網址在 http://localhost:8000/blog/。

  很快吧!當然我忽略了美工,也沒有客製化一下後台,不過 Web 開發愈來愈可怕了….真怕這種開發框架愈來愈多,老板都覺得寫網頁沒什麼了呢!
  值得一提的是,django 在 runserver 之後,都會把程式碼 compile 成 pyc 檔,看起來效率應該還不錯,也許要等我多玩熟一點才能做些實驗囉。
  from http://blog.ericsk.org/archives/815

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-374549-1-1.html 上篇帖子: Lu与C/C++、Forcal、MATLAB、Python、Lua等各种语言的速度比较 下篇帖子: Turn to Python from Perl: example of SSH in multi-threads
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表