Django--BBS项目 需求模仿抽屉()和虎嗅()做一个网站bbs知识点Django知识:models表字段第一个属性可以用 u"别名" 标明字段名称,效果同 verbose_name='别名';使用Django自带的用户认证表  from django.contrib.auth.models import User ,里面包含了username和password等,它是一对一的关系,即每个账户对应了自己的一个关联表;评论只是多一个parent字段,外键是"self",然后用递归函数取出;models.create()方法只返回true or false ,save()方法能返回具体;migrate只创建auth和Django表,不会创建自己的表;自关联ForeignKey("self")的时候,要加参数 related_name,而且名字不能和外键字段名称相同;因为反向查询的时候,Comment.parent_comment和Comment.comment会冲突。blank=True,是Dj





项目步骤

1、设计数据库

创建表:

用户表、用户组表、文章表、板块表、评论表、点赞表。

表中包括的字段:
  • 用户表:账户、真实姓名、用户属组

  • 用户组表:组名

  • 文章表:文章名、所属板块、标题图片、内容、作者、发布时间、是否隐藏、优先级

  • 板块表:板块名称、版主

  • 评论表:文章名、父评论、评论内容、评论时间

  • 点赞表:文章名、用户、点赞时间

初始化数据库

2、admin页面

  1. 将models表加入admin

  2. 后台中添加文章,评论等,跑通流程

3、前端页面

  1. Bootstrap页面index.html

  2. urls配置、views配置

  3. 用户登录后的dropdown下拉菜单,在前端用if判断,如果登录了就显示注销啥的,没登录就显示注册和登录按钮

  4. logout注销,urls,views,用Django原生logout函数

  5. 主页当成模板,其它板块页面(simple_tag母版继承、板块用动态id),所以综合区不能用动态id过滤;

  6. admin后台加入板块,并自定义显示信息;

  7. 各板块的标签active转换效果

  8. 综合板块前端页面index.html,(左右栏占比,文章栏)

  9. 每个文章的链接、文章页面、文章不存在异常处理、404页面;图片要等发布做完才能显示,因为这时数据库中的路径不能获取到;

4、登录

  1. 登录页面login.html

  2. 登录后右上角显示登录状态,登出

5、用户操作

  1. 发帖,右上角下拉菜单做一个发帖选项

  2. form表单验证合法性

  3. 数据库插入数据

  4. 发布成功显示什么,没有这个文章id就创建。。。

  5. 最新发布的文章置顶,用reverse查询

  6. 图片上传功能完善,img传到每个用户自己的目录里

  7. 分级评论


一些新知识

models:原生User表

1
2
3
from django.contrib.auth.models import User
class UserInfo(models.Model):
    username = models.OneToOneField(User)

admin:显示多个字段

1
2
3
class ArticleAdmin(admin.ModelAdmin):
    list_display = ('id','title','author','hidden','publish_date')
admin.site.register(models.Article,ArticleAdmin)

显示‘账户名’或‘登录’按钮​:

1
2
3
4
5
{% if request.user.is_authenticated %}
    显示用户登录后的下拉列表
{% else %}
    显示登录信息
{% endif %}

板块按数字分页:

1
url(r'^plate/(d+)$', views.plate,name='plate')

1
2
3
def plate(request,plate_num):
    articles = models.Article.objects.filter(plate_id=plate_num)
    return render(request,'index.html',{'articles':articles})

1
<a href="{% url 'plate' 2 %}">板块2</a>

标签切换高亮:

1
2
3
4
5
$(function(){
    var menus = $("#plate a[href='{{ request.path }}']")[0];
    $(menus).parent().addClass('active-blue');
    $(menus).parent().siblings().removeClass('active-blue');
});

文章详细页:

1
<a href="{% url 'article' article.id %}">{{ article.title }}</a>

1
url(r'^article/(d+)$', views.article,name='article')

1
2
3
def article(request,article_id):
    article_obj = models.Article.objects.get(id=article_id)
    return render(request,'article.html',{'article_obj':article_obj})



详细

参考:day20课上代码或homework

















来自为知笔记(Wiz)