Django小项目简单BBS论坛
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django小项目简单BBS论坛相关的知识,希望对你有一定的参考价值。
开发一个简单的BBS论坛
项目需求:
1 整体参考“抽屉新热榜” + “虎嗅网” 2 实现不同论坛版块 3 帖子列表展示 4 帖子评论数、点赞数展示 5 在线用户展示 6 允许登录用户发贴、评论、点赞 7 允许上传文件 8 帖子可被置顶 9 可进行多级评论
知识必备:(注:没有必备下面知识的同学,请返回去看会之后再看下面的内容防止蒙了~~!)
1 Django 2 html\\CSS\\JS 3 BootStrap 4 Jquery
设计表结构
1、表结构重要性
在开发任何项目的时候,设计到数据库,第一个事情要做的是设计表结构。表结构设计不好就不要写代码,表结构是体现了你业务逻辑关系的。你的数据都要往数据库里存,其实表结构你要理清了你的架构也就出来了!
2、设计表
#!/usr/bin/env python #-*- coding:utf-8 -*-from __future__ import unicode_literals from django.db import models from django.contrib.auth.models import User # Create your models here.class Article(models.Model): ‘‘‘ 帖子表 ‘‘‘#标题最大长度255,不能重名 title = models.CharField(u‘文章标题‘,max_length=255,unique=True) #发布办款-使用外键关联Category category = models.ForeignKey("Category",verbose_name=‘板块名称‘) ‘‘‘ 这里在admin中,title默认是显示英文的,我们可以在他的最前面加要给字段,在admin中就可以显示中文,他和verbose_name一样,什么时候必须使用 verbose_name呢?比如上面的{category = models.ForeignKey("Category",verbose_name=‘板块名称‘)} 这个字段第一个字段是关联的类,这里 就必须使用verbose_name ‘‘‘#上传文件 head_img = models.ImageField(upload_to="uploads") #文章内容(文章内容可能有很多,所以我们就不用"CharField"来写了,我们用TextField,不用规定他多长了,为可扩展长度) content = models.TextField(u"内容") #文章作者 author = models.ForeignKey("UserProfile",verbose_name="作者") #发布日期 publish_date = models.DateTimeField(auto_now=True,verbose_name="发布日期") #是否隐藏 hidden = models.BooleanField(default=False,verbose_name="是否隐藏") #帖子的优先级 priority = models.IntegerField(default=1000,verbose_name="优先级") def __unicode__(self): return "<%s,author:%s>" % (self.title,self.author) class Comment(models.Model): ‘‘‘ 评论表 ‘‘‘#评论是基于文章的,并且一条评论只属于一个文章!对多的关系#一个文章可以有多个评论,一个评论只属于一个文章#评论文章 article = models.ForeignKey("Article") #评论用户 user = models.ForeignKey("UserProfile") #评论内容 comment = models.TextField(max_length=1000) #评论时间 date = models.DateTimeField(auto_now=True) #多级评论,是不是评论评论的当前的表(自己表),所以就得和自己做一个关联!#这里在关联自己的时候必须设置一个related_name否则会报错冲突#这里parent_comment,必须设置为可以为空,因为如果他是第一评论他是没有父ID的 parent_comment = models.ForeignKey("self",related_name=‘p_comment‘,blank=True,null=True) ‘‘‘ prent self Null 1 1 2 1 3 2 4 通过上面的这种方法来记录,评论的级别关系! ‘‘‘def __unicode__(self): return "<user:%s>" %(self.user) class ThumbUp(models.Model): ‘‘‘ 点赞 ‘‘‘#给那个文章点的 article = models.ForeignKey(‘Article‘) #用户名 user = models.ForeignKey(‘UserProfile‘) #时间 date = models.DateTimeField(auto_now=True) class Category(models.Model): ‘‘‘ 板块表 ‘‘‘#板块名称 name = models.CharField(max_length=64,unique=True,verbose_name="板块名称") #板块管理员 admin = models.ManyToManyField("UserProfile",verbose_name="模块管理员") def __unicode__(self): return self.name class UserProfile(models.Model): ‘‘‘ 用户表 ‘‘‘#使用Django提供的用户表,直接继承就可以了.在原生的User表里扩展!(原生的User表里就有用户名和密码)#一定要使用OneToOne,如果是正常的ForeignKey的话就表示User中的记录可以对应UserProfile中的多条记录!#并且OneToOne的实现不是在SQL级别实现的而是在代码基本实现的! user = models.OneToOneField(User) #名字 name = models.CharField(max_length=32) #属组 groups = models.ManyToManyField("UserGroup") def __unicode__(self): return self.name class UserGroup(models.Model): ‘‘‘ 用户组表 ‘‘‘ name = models.CharField(max_length=64,unique=True) def __unicode__(self): return self.name
配置Django Admin
配置admin注册model,不要忘记创建Django 管理员用户
from django.contrib import admin import models # Register your models here. admin.site.register(models.Article) admin.site.register(models.Category) admin.site.register(models.Comment) admin.site.register(models.ThumbUp) admin.site.register(models.UserProfile) admin.site.register(models.UserGroup)
我创建了几个板块,我在板块中查看的时候。只能看到下面简单的信息:
这里我想看到板块中的ID或其他信息怎么办?
#!/usr/bin/env python #-*- coding:utf-8 -*-from django.contrib import admin import models # Register your models here.#给某个表专门的定制的类class CategoryAdmin(admin.ModelAdmin): list_display = (‘id‘,‘name‘) class ArticleAdmin(admin.ModelAdmin): list_display = (‘id‘,‘title‘,‘author‘,‘hidden‘,‘publish_date‘) admin.site.register(models.Article,ArticleAdmin) #把自定义的类绑定到注册的类中 admin.site.register(models.Category,CategoryAdmin) #把自定义的类绑定到注册的类中admin.site.register(models.Comment) admin.site.register(models.ThumbUp) admin.site.register(models.UserProfile) admin.site.register(models.UserGroup)
效果如下:
前端页面&URLorViews配置
1、url别名使用
url里配置别名
url(r‘^category/(\\d+)/$‘,views.category,name=‘category‘),
html里配置的时候就只认那个别名了
<li role="presentation"><a href="{% url ‘category‘ 1 %}">欧美专区</a></li><li role="presentation"><a href="{% url ‘category‘ 2 %}">日韩专区</a></li><li role="presentation"><a href="{% url ‘category‘ 3 %}">印度专区</a></li>
别名的好处:如果说那天想修改url里的这个url名称了,是不是所有前端都得修改!并且在有好几层的时候怎么改使用别名就会非常方便了!
2、前端页面写完之后发现图片无法正常显示
出现这个问题的原因:他能找到uploads这个目录吗?他能直接访问这个目录吗?他不能直接访问不了!
- 一个是在Linux环境下做一个软连接连接过去
如果在settings里加入uploads这个目录,但是这个方法还是有问题!他会去找/static/uploads/uploads目录,看下面的图!
但是通过下面的方式就可以访问(原因就是因为:他去/static/uploads/uploads目录找了)
2.2、我们自己写上传的方法
定义form表单认证
以上是关于Django小项目简单BBS论坛的主要内容,如果未能解决你的问题,请参考以下文章