python小打小闹之简陋版BBS
2016-07-04 12:17
288 查看
闲的蛋疼,索性写个东西玩,于是,写个类似于BBS的念头就开始了。
我们考虑到需要实现的功能:
1 只有登陆的用户才可以点赞,如果没有登陆,那么不可以点赞,点赞次数只可以为1。
2 只有登陆的用户可以评论文章,其他用户也可通过回复其他人的评论。
3 评论之间有多级嵌套关系,不是单独存在的,比我评论文章A,别人在我的评论基础上再评论我的评论,那么我的评论和别人评论我的评论之间存在一层关系。
4 用户可以增删改查自己的文章,可以搜索自己的文章。文章包含三种状态,发布,草稿,隐藏。
5 每篇文章需要显示发布日期,发布人,点赞次数,评论次数,在首页展示的时候能够图文并茂展示,通过文章优先级来让部分文章置顶显示。
6 文章要有归属模块,页面展示出板块
7 and so on ...
我个人觉得只要实现上述功能,BBS的雏形就出来了。那么开工吧。
所需要的知识:
1 django+python
2 js
3 jinja
=================================================================================================
首先这个毫无疑问使用的Django 作为我的web frame。
第一要解决的是数据库关系,此时我拿Django默认的sqilite作为我的数据库,数据库关系我的想法是:
文章表:用户名(外键关联用户表), 发布时间,修改时间,状态,文章内容,文章归属模块,内容简介,优先级,文章头像
评论表:评论时间,是点赞还是评论,评论内容,归属哪篇文章(关键文章表),父籍评论ID
版块表:名字,简介,置顶文章,版块位置。
用户表: 关联Django系统自带的用户,用户名。
数据库建表关系解决 后,那就初始化,数据库。。。。。。。。
代码我在此我就简单说说几点:
1 点赞次数限制:
说到点赞,我们采用三个值来确定这个用户是否点赞过一次了,文章ID+用户ID+当前点赞次数
我们在评论表存储这个用户点赞次数的时候,连同用户ID一块存储进去,所以我们单单过滤这个表就可以了。
前端代码:
后端代码,
2 只有可以登陆才可以评论,并且在评论框中点击登陆,登陆成功后自动跳转到刚才的页面,跳转的关键点在于?next,通过这个我们后端可以让用户重定向到next指定的页面:
前端代码展示:
后端代码展示:
3 评论多级嵌套关系:
公司事今天有点多,今晚再弄,
4 用户新建一篇自己的文章,通过form来创建表单
前端代码如下:
View Code
好了,上面的代码差不多就实现了基础的功能,具体的代码细节,可以看本人的github,哈哈,as python newber , you can pratice python+Django+js+jinja by make BBS!!
我们考虑到需要实现的功能:
1 只有登陆的用户才可以点赞,如果没有登陆,那么不可以点赞,点赞次数只可以为1。
2 只有登陆的用户可以评论文章,其他用户也可通过回复其他人的评论。
3 评论之间有多级嵌套关系,不是单独存在的,比我评论文章A,别人在我的评论基础上再评论我的评论,那么我的评论和别人评论我的评论之间存在一层关系。
4 用户可以增删改查自己的文章,可以搜索自己的文章。文章包含三种状态,发布,草稿,隐藏。
5 每篇文章需要显示发布日期,发布人,点赞次数,评论次数,在首页展示的时候能够图文并茂展示,通过文章优先级来让部分文章置顶显示。
6 文章要有归属模块,页面展示出板块
7 and so on ...
我个人觉得只要实现上述功能,BBS的雏形就出来了。那么开工吧。
所需要的知识:
1 django+python
2 js
3 jinja
=================================================================================================
首先这个毫无疑问使用的Django 作为我的web frame。
第一要解决的是数据库关系,此时我拿Django默认的sqilite作为我的数据库,数据库关系我的想法是:
文章表:用户名(外键关联用户表), 发布时间,修改时间,状态,文章内容,文章归属模块,内容简介,优先级,文章头像
评论表:评论时间,是点赞还是评论,评论内容,归属哪篇文章(关键文章表),父籍评论ID
版块表:名字,简介,置顶文章,版块位置。
用户表: 关联Django系统自带的用户,用户名。
数据库建表关系解决 后,那就初始化,数据库。。。。。。。。
代码我在此我就简单说说几点:
1 点赞次数限制:
说到点赞,我们采用三个值来确定这个用户是否点赞过一次了,文章ID+用户ID+当前点赞次数
我们在评论表存储这个用户点赞次数的时候,连同用户ID一块存储进去,所以我们单单过滤这个表就可以了。
前端代码:
<script src="/static/bootstrap/js/jquery-2.1.4.js"></script> <script> //获取点赞数的函数 function Get_Praise(article_id,ele){ $.get("{% url "post_comment" %}", {'id':article_id,'choice':2}, //紧跟的是参数 function (data) { $(ele).html(' '+data) } ) } //提交点赞请求 function click_praise(ele){ var article_id = $(ele).siblings().first().attr('article_id'); var GetCsrf = $("input[name='csrfmiddlewaretoken']").val(); // begin post $.post("{% url 'post_comment' %}", { 'comment_type':2, 'article':article_id, 'user':'{{ request.user.userprofile.id }}', 'csrfmiddlewaretoken': GetCsrf, }, //end post function(callback){ // 如果返回来的参数是limit说明这个用户被限制点赞了,因为点赞次数超过1次了 if(callback=='error'){ alert('点赞失败,可能是网络问题导致的') }else if(callback=='limit'){ alert('您已经点赞过一次了,请勿重复点赞!!') } else{ Get_Praise(article_id,ele) } } ) }
后端代码,
praise_obj = models.Article.objects.filter(id=article_id) for pb in praise_obj: # 通过反向查询,来获取comment表里面的内容,表后面必须紧接着 _set ! pb_obj = pb.comment_set.select_related() # get the praise's number,and count that! praise = pb_obj.filter(comment_type=comment_type).count() return HttpResponse(praise)
2 只有可以登陆才可以评论,并且在评论框中点击登陆,登陆成功后自动跳转到刚才的页面,跳转的关键点在于?next,通过这个我们后端可以让用户重定向到next指定的页面:
前端代码展示:
<div class="comment-box"> {% if request.user.is_authenticated %} <textarea class="form-control" rows="3"></textarea> {% csrf_token %} <button type="button" style="margin-top: 10px" class="btn btn-success pull-right">评论</button> {% else %} <div class="jumbotron"> <h4 class="text-center"><a class="btn-link" href="{% url 'login' %}?next={{ request.path }}">登录</a>后评论</h4> </div> {% endif %} </div>
后端代码展示:
if request.method == 'POST': user = authenticate(username=request.POST.get('username'), password=request.POST.get('password')) if user is not None: #pass authentication login(request,user) return HttpResponseRedirect(request.GET.get('next') or '/bbs')
3 评论多级嵌套关系:
公司事今天有点多,今晚再弄,
4 用户新建一篇自己的文章,通过form来创建表单
前端代码如下:
def category(request,category_id=4): ''' 展示页面顶部模块的名字. :param request: :param category_id: :return: ''' category_obj = models.Category.objects.get(id=category_id) if category_obj.position_index == 1: # 1 表示是首页 article_list = models.Article.objects.filter(status='published') else: article_list = models.Article.objects.filter(category_id=category_obj.id,status='published') article_list = paginate(request,article_list) # 分页方法处理下,使其返回前台是分页的! return render(request,'bbs/index.html',{'category_list':category_list, 'category_obj':category_obj, 'article_list':article_list})
View Code
好了,上面的代码差不多就实现了基础的功能,具体的代码细节,可以看本人的github,哈哈,as python newber , you can pratice python+Django+js+jinja by make BBS!!
相关文章推荐
- 使用Python学习selenium测试工具-4:查找元素
- 解决mac osx下pip安装ipython权限的问题
- python符号打印,bpython ,脚本tab自动补全
- python之生成随机数和字符串
- Windows下Python机器学习编程环境安装
- 对Python的深度学习库Theano的介绍
- 使用Python学习selenium测试工具-3:unittest库介绍
- python 操作sqlite数据库
- 用pip 安装 python-consul
- 升级Python3
- 我的python学习--第一天
- Python numpy学习
- 机器学习 画出超平面w.T*x+b
- Python实现代码统计工具(终极篇)
- 学python的那些事——初学python之菜鸟的起航
- 特斯拉车祸致死:自动驾驶还不能完全放开方向盘
- 使用Python学习selenium测试工具-2:快速入门
- 使用Python学习selenium测试工具-1:Selenium的前生今世
- Python开发动态网页基础(三)
- 用Python挖掘Twitter数据Part1:数据采集