1.關(guān)于templates與static的目錄設(shè)置
最佳實踐為在app中單獨設(shè)置templates和static目錄强缘,不要在項目的根目錄下設(shè)置片习。例如延届,templates的設(shè)置為:
<appname>
----templates
----<appname>
----xxxx.html
static設(shè)置為:
<appname>
----static
----<appname>
----css
----xxxx.css
----images
----xxxx.jpg
另外址貌,不需要在項目的settings.py中再額外設(shè)置templates或static的路徑脚翘。
2.關(guān)于Admin界面的數(shù)據(jù)表顯示設(shè)置
list_displya
表示在數(shù)據(jù)表頁面展示的列名
示例:
class PageAdmin(admin.ModelAdmin):
list_display = ('title', 'category', 'url')
admin.site.register(Page, PageAdmin)
repopulated_fields
表示一個列的數(shù)據(jù)隨另一個列的數(shù)據(jù)而生成
示例:
class CategoryAdmin(admin.ModelAdmin):
list_display = ('name', 'views', 'likes')
prepopulated_fields = {'slug': ('name',)} # 數(shù)據(jù)表中slug字段的值隨著name的值而生成骂因。
admin.site.register(Category, CategoryAdmin)
verbose_name_plural
設(shè)置部分單詞的復數(shù)形式炎咖。Admin界面默認英語單詞的復數(shù)形式為在詞末直接加‘s’,但這對部分單詞來講是錯誤的,比如‘category’的復數(shù)為'categories',不是'categorys'。解決此問題的辦法是在category的model設(shè)置中添加如下代碼:
class Category(models.Model):
...
class Meta:
verbose_name_plural = 'categories'
3.關(guān)于request
1)request.user.is_authenticated()
用法:用于在app的views.py中判斷用戶是否已授權(quán)(登錄)乘盼,返回值為True
(表示已登錄),False
(表示未登錄)
此外升熊,在templates(模板)文件中,可以使用request.user.is_authenticated
結(jié)合if
模板標簽判斷用戶是否已登錄(注意最好不要去掉request
)绸栅,以及后續(xù)的不同響應(yīng)级野。
2)使用request判斷訪問IP地址
一般使用request.META['REMOTE_ADDR']
獲取用戶的訪問IP地址,但是但是有些網(wǎng)站服務(wù)器會使用ngix等代理http粹胯,或者是該網(wǎng)站做了負載均衡蓖柔,導致使用remote_addr抓取到的是1270.0.1,這時使用HTTP_X_FORWARDED_FOR才獲得是用戶的真實IP风纠。推薦使用以下代碼况鸣,即可涵蓋以上兩種情況:
if request.META.has_key('HTTP_X_FORWARDED_FOR'):
ip = request.META['HTTP_X_FORWARDED_FOR']
else:
ip = request.META['REMOTE_ADDR']
4.關(guān)于時區(qū)
最簡單的做法是設(shè)置settings
中的USE_TZ=False
,即可解決大部分的時區(qū)不一致問題竹观。
5.結(jié)合javascript實現(xiàn)頁面跳轉(zhuǎn)
有時候用戶會訪問到不存在任何內(nèi)容的頁面镐捧,這時顯示頁面不存在
(需要自己設(shè)置),希望隔一定的時間后栈幸,頁面自動跳轉(zhuǎn)到其他頁面愤估,可以利用javascript的setTimeout
函數(shù)實現(xiàn),代碼如下:
<script>
function go() {//定義函數(shù)
window.location = "{% url 'index' %}";//頁面跳轉(zhuǎn)
}
window.setTimeout("go()", 1500);//1.5秒后執(zhí)行函數(shù)go
</script>
6.Log相關(guān)設(shè)置
1)Log Level
指定log的輸出級別速址,從高到低分別為CRITICAL, ERROR, WARNING, INFO, DEBUG(字母大寫玩焰,親測小寫字母不可行)。若Log Level為DEBUG芍锚,則所有信息都會輸出昔园,若Log Level為ERROR,則只有ERROR級別及以上的CRITICAL級別信息會輸出并炮。
Log Level既可以在項目的setting.py文件中設(shè)置默刚,如LOG_LEVEL = 'INFO'
,也可以在命令行執(zhí)行爬蟲命令的時候設(shè)置逃魄,如scrapy crawl <spider name> --loglevel INFO
荤西。
2)Log File
指定log信息的輸出文件,一般在項目的setting.py文件中設(shè)置伍俘。如不設(shè)置邪锌,則在終端輸出log信息(并不絕對,如在crontab中設(shè)置scrapy的定時任務(wù)時癌瘾,log信息并不在終端輸出觅丰,就算重定向>到終端,仍然不輸出)妨退;如設(shè)置妇萄,則在指定的文件中輸出log信息蜕企。
7.輕松實現(xiàn)“閱讀更多”功能
經(jīng)常在制作博客網(wǎng)站時,主界面列出的文章一般要附帶一些文章開頭的文字內(nèi)容冠句,實現(xiàn)起來其實很輕松轻掩,只需要用到模板標簽truncatewords_html即可。例如:
{{ post.content|truncatewords_html:20}}
表示顯示文章內(nèi)容的前20個單詞懦底。