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

首頁 > 學院 > 開發設計 > 正文

跟我一起Django-02優化一個應用

2019-11-14 17:36:35
字體:
來源:轉載
供稿:網友


Github Source: https://github.com/Ganiks/django

上一篇中我們已經創建了一個blog app,現在來用一下~

2.1 添加第一篇blog


這個post 列表很丑陋哦,連標題都木有顯示~

2.2 自定義blog list

自定義下 blog/model.py

from django.db import modelsfrom django.contrib import admin# Create your models here.#django.db.models.Model is the core partof the ORM system of Djangoclass BlogPost(models.Model):	# Django will add an auto-increment, unique id	title = models.CharField(max_length=150)	body = models.TextField()	timestamp = models.DateTimeField()class BlogPostAdmin(admin.ModelAdmin):	list_display = ('title', 'timestamp')admin.site.register(BlogPost, BlogPostAdmin)

server會檢測到文件代碼的變動,無需重啟,即更新(Django超贊的神器):

[11/Sep/2014 16:26:23] "POST /admin/blog/blogpost/add/ HTTP/1.1" 200 5177[11/Sep/2014 16:26:23] "GET /admin/jsi18n/ HTTP/1.1" 200 2372[11/Sep/2014 16:26:23] "GET /static/admin/img/icon_error.gif HTTP/1.1" 200 319[11/Sep/2014 16:26:28] "POST /admin/blog/blogpost/add/ HTTP/1.1" 302 0[11/Sep/2014 16:26:28] "GET /admin/blog/blogpost/ HTTP/1.1" 200 4597[11/Sep/2014 16:26:28] "GET /admin/jsi18n/ HTTP/1.1" 200 2372Performing system checks...System check identified no issues (0 silenced).September 11, 2014 - 16:28:13Django version 1.7, using settings 'mysite.settings'Starting development server at http://127.0.0.1:8000/Quit the server with CTRL-BREAK.[11/Sep/2014 16:28:27] "GET /admin/blog/blogpost/ HTTP/1.1" 200 4779[11/Sep/2014 16:28:27] "GET /static/admin/CSS/base.css HTTP/1.1" 304 0[11/Sep/2014 16:28:27] "GET /static/admin/js/core.js HTTP/1.1" 304 0[11/Sep/2014 16:28:27] "GET /static/admin/css/changelists.css HTTP/1.1" 304 0[11/Sep/2014 16:28:27] "GET /static/admin/js/admin/RelatedObjectLookups.js HTTP/1.1" 304 0[11/Sep/2014 16:28:27] "GET /static/admin/js/jquery.js HTTP/1.1" 304 0[11/Sep/2014 16:28:27] "GET /static/admin/js/jquery.init.js HTTP/1.1" 304 0[11/Sep/2014 16:28:27] "GET /static/admin/js/actions.js HTTP/1.1" 304 0[11/Sep/2014 16:28:27] "GET /admin/jsi18n/ HTTP/1.1" 200 2372

現在每次點擊了文章的標題,是不是直接進入了update post的界面呢?但是按照一般習慣,是不是應該還有個view post的界面?。。。?/h4>

2.3 建立blog的公共部分

完成了app的數據庫和admin部分后,來看看面向公眾的頁面部分。

從Django的角度來說, 一個也沒具有3個典型的組件

  • template: 負責將傳遞進來的信息顯示出來,類似python字典的對象Context
  • view函數: 負責獲取要顯示的信息,通常來自db
  • URL模式:用來把收到的請求和你的視圖函數匹配,也會想視圖傳遞參數

2.3.1 創建模板

ganiks.liu@MAMIS-GAIKS-LIU /E/mysite/mysite/blog/templates (master)$ ls -ltotal 1-rw-r--r--    1 ganiks.l Administ      121 Sep 11 16:34 archive.htmlganiks.liu@MAMIS-GAIKS-LIU /E/mysite/mysite/blog/templates (master)$ cat archive.html{% for post in posts %}<h2>{{ post.title }}</h2><p>{{ post.timestamp }}</p><p>{{ post.body }}</p>{% endfor %}

2.3.2 創建一個視圖函數

#Django1.7 versionfrom django.shortcuts import renderfrom mysite.blog.models import BlogPost# Create your views here.def archive(request):	posts = BlogPost.objects.all()	return render(request, 'archive.html', {'posts': posts})

看看老版本的

#Django old versionsfrom django.template import loader, Contextfrom django.http import HttPResponsefrom mysite.blog.models import BlogPostdef archive(request):	posts = BlogPost.objects.all()	return HttpResponse(loader.get_template("archive.html").render(Context({'posts': posts })))

2.3.3 創建一個URL模式

先修改下mysite的url

from django.conf.urls import patterns, include, urlfrom django.contrib import adminurlpatterns = patterns('',    # Examples:    # url(r'^$', 'mysite.views.home', name='home'),    url(r'^blog/', include('mysite.blog.urls')),    url(r'^admin/', include(admin.site.urls)),)

再在mysite.blog目錄下創建urls.py

from django.conf.urls import patterns, include, urlfrom mysite.blog.views import archiveurlpatterns = patterns('',    url(r'^$', archive),)

訪問下http://localhost:8000/blog/就可以看到blog列表的效果了

2.4 最后的潤色

2.4.1 模板的精確定位

這里考慮到模板在后期的可重用性,將之前的archive.html拆分出一個base.html

base.html

<html><style type="text/css" charset="uft-8">body{	background: #ededed;	margin: 0;	padding: 20px;}h1{	color: brown;	padding: 10px;	border: 2px solid #000de3;}</style><body><h1>http://m.survivalescaperooms.com/ganiks/</h1>{% block content %}{% endblock %}</body></html>

archive.html

{% extends "base.html" %}{% block content %}	{% for post in posts %}	<h2>{{ post.title }}</h2>	<p>{{ post.timestamp }}</p>	<p>{{ post.body }}</p>	{% endfor %}{% endblock %}

2.4.2 按日期排序

如圖,blog列表中文章并沒有按照時間倒序排列;想要做到這個,有2種方式:
修改model排序和或者在view中給BlogPost.objects.all()添加排序方法

這里采用修改model,很簡單,給model頂一個Meta嵌套類,然后設置ordering屬性

from django.db import modelsfrom django.contrib import admin# Create your models here.#django.db.models.Model is the core partof the ORM system of Djangoclass BlogPost(models.Model):	# Django will add an auto-increment, unique id	title = models.CharField(max_length=150)	body = models.TextField()	timestamp = models.DateTimeField()	class Meta:		ordering = ('-timestamp',)class BlogPostAdmin(admin.ModelAdmin):	list_display = ('title', 'timestamp')admin.site.register(BlogPost, BlogPostAdmin)

千萬不要忘記ordering = ('-timestamp', ) 小括號結尾的逗號!
這代表這是一個單元素的元組,而不是一個帶小括號的字符串。
比如,可以這樣定義排序 ordering = ('-timestamp', 'title')

2.4.3 通過模板過濾器格式化時間戳

看看這個頁面還有沒有不順眼的地方,比如Sept. 11, 2014, 4:23 p.m.這個玩意的格式不爽

在介紹一個Django的神器————過濾器(filter)

這個東西,是一個表示層的細節,所以最適合用的地方就是在模板中

<p>{{ post.timestamp }|date }} </p><p>{{ post.timestamp }|date:"l, F jS" }} </p>

好了,顯示變成了Friday, September 12th

注意,這里不要在冒號兩邊留有空格,Django的模板引擎對空格敏感(真的假的?貌似沒影響啊我這里)

2.5 總結下Django

  • 內置的Web服務器讓開發工作自給自足,同時它可以自動加載你代碼的變動?。。?br />
  • 數據模型的創建采用純python的方式完成,不用剛維護編寫任何SQL代碼或者xml
  • 自動話的admin特性,提供了完整的內容編輯特性
  • 模板系統,可以用來生成HTML CSS javascript及其他任何文本輸出格式
  • 模板過濾器,在顯示層修改數據顯示
  • URLconfi系統,在給與你RUL設計極大靈活性的同時,還能將應用程序特定的URL部分保留在其所屬的應用程序內部


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 桃园县| 宜丰县| 邓州市| 尚义县| 房产| 改则县| 湘阴县| 宁陵县| 仲巴县| 泾源县| 东光县| 抚松县| 健康| 香格里拉县| 成武县| 廉江市| 徐州市| 樟树市| 青川县| 连云港市| 泰宁县| 玛沁县| 广灵县| 吕梁市| 博白县| 山丹县| 东乌| 建德市| 科尔| 江永县| 海阳市| 永嘉县| 玛多县| 中山市| 滁州市| 祥云县| 西吉县| 黎平县| 汉阴县| 游戏| 保德县|