论坛项目主要实现版块切换、发帖、评论等功能,这次作业中收获颇多以下进行记录。
对于切换页面,无需写多个url而是使用动态url,例如:
url(r‘^categroy/(\d+)/$‘,views.category,name=‘category‘)
其中name为url为别名
对于每个传进来的url值,在后台使用models.Article.objects.filter(category_id = category_id)进行过滤以得到不同的版块。
判断用户是否登录:
使用django原生的验证方式:{% if request.user.is_authenticated%}
user使用的是django原生表:User,要想使用User表,需要与用户定义的表建立1对1关系。
可以通过下列方法验证用户名和密码输入:
username = request.POST.get(‘username‘)
password = request.POST.get(‘password‘)
user = authenticate(username = username,password = password)
原生的用户登录方法:
login(request,user)
原生的用户注销方法:
login(request,user)
这两个方法需要导入django的模块:
from django.contrib.auth import authenticated,login,logout
CSRF:跨站请求伪造
在POST提交表单时csrf会将请求当做伪造请求,从而页面出现403
解决方法是:1:如果csrf检验,直接在settings中的middleware中注释掉csrf,不推荐
2:在表单标签中加入{% csrf_token%},这样在render进行页面渲染时会自动检查提供给csrf相应的认证
表单中提交文件
如果想在表单中提交文件,需要在form标签中加入enctype="multipart/form-data",在后台form获取数据时,要同时获取request.File
高级的textarea
可以使用CKeditor插件进行编辑,使用方法很简单,1:导入ckeditor.js文件:2:在form中写一个textarea,id=‘sth’,3:写一个js将textarea替换为CKeditor:CKEDITOR.replace(‘sth‘);
自关联:
在进行评论时有时要回复已有的评论,这就相当于自关联,自关联的写法如下:
p = models.ForeignKey(‘self‘,related_name = ‘parent_comment‘)
self为自己,也可以使用表明,related_name 指定一个列命,只是不要和这个自关联列重名,例如不要=‘p‘
admin中更好地显示记录
我们可以在admin中定义一个类,然后让相应的表以改方式来显示记录,例如:
class ArticleAdmin(admin.ModelAdmin)
list_display = (‘ip‘,‘name‘,‘port‘)
admin.site.register(models.Article,ArticleAdmin)