1.关于templates与static的目录设置
最佳实践为在app中单独设置templates和static目录,不要在项目的根目录下设置。例如,templates的设置为:
<appname>
----templates
----<appname>
----xxxx.html
static设置为:
<appname>
----static
----<appname>
----css
----xxxx.css
----images
----xxxx.jpg
另外,不需要在项目的settings.py中再额外设置templates或static的路径。
2.关于Admin界面的数据表显示设置
list_displya
表示在数据表页面展示的列名
示例:
class PageAdmin(admin.ModelAdmin):
list_display = ('title', 'category', 'url')
admin.site.register(Page, PageAdmin)
repopulated_fields
表示一个列的数据随另一个列的数据而生成
示例:
class CategoryAdmin(admin.ModelAdmin):
list_display = ('name', 'views', 'likes')
prepopulated_fields = {'slug': ('name',)} # 数据表中slug字段的值随着name的值而生成。
admin.site.register(Category, CategoryAdmin)
verbose_name_plural
设置部分单词的复数形式。Admin界面默认英语单词的复数形式为在词末直接加‘s’,但这对部分单词来讲是错误的,比如‘category’的复数为'categories',不是'categorys'。解决此问题的办法是在category的model设置中添加如下代码:
class Category(models.Model):
...
class Meta:
verbose_name_plural = 'categories'
3.关于request
1)request.user.is_authenticated()
用法:用于在app的views.py中判断用户是否已授权(登录),返回值为True
(表示已登录),False
(表示未登录)
此外,在templates(模板)文件中,可以使用request.user.is_authenticated
结合if
模板标签判断用户是否已登录(注意最好不要去掉request
),以及后续的不同响应。
2)使用request判断访问IP地址
一般使用request.META['REMOTE_ADDR']
获取用户的访问IP地址,但是但是有些网站服务器会使用ngix等代理http,或者是该网站做了负载均衡,导致使用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.关于时区
最简单的做法是设置settings
中的USE_TZ=False
,即可解决大部分的时区不一致问题。
5.结合javascript实现页面跳转
有时候用户会访问到不存在任何内容的页面,这时显示页面不存在
(需要自己设置),希望隔一定的时间后,页面自动跳转到其他页面,可以利用javascript的setTimeout
函数实现,代码如下:
<script>
function go() {//定义函数
window.location = "{% url 'index' %}";//页面跳转
}
window.setTimeout("go()", 1500);//1.5秒后执行函数go
</script>
6.Log相关设置
1)Log Level
指定log的输出级别,从高到低分别为CRITICAL, ERROR, WARNING, INFO, DEBUG(字母大写,亲测小写字母不可行)。若Log Level为DEBUG,则所有信息都会输出,若Log Level为ERROR,则只有ERROR级别及以上的CRITICAL级别信息会输出。
Log Level既可以在项目的setting.py文件中设置,如LOG_LEVEL = 'INFO'
,也可以在命令行执行爬虫命令的时候设置,如scrapy crawl <spider name> --loglevel INFO
。
2)Log File
指定log信息的输出文件,一般在项目的setting.py文件中设置。如不设置,则在终端输出log信息(并不绝对,如在crontab中设置scrapy的定时任务时,log信息并不在终端输出,就算重定向>到终端,仍然不输出);如设置,则在指定的文件中输出log信息。
7.轻松实现“阅读更多”功能
经常在制作博客网站时,主界面列出的文章一般要附带一些文章开头的文字内容,实现起来其实很轻松,只需要用到模板标签truncatewords_html即可。例如:
{{ post.content|truncatewords_html:20}}
表示显示文章内容的前20个单词。