Django--015 评论功能设计 用户登录

思路:  评论:1.建立评论APP,2.设计模型models,3.后台显示 admin。

             用户登录: 1.页面进行用户登录判断,2.设计登录url和处理方法(detail),3.设计登录错误页面。

             评论: 1.页面添加评论内容,2.评论url和评论内容处理方法(APP comment),3.页面detail中显示评论列表,修改处理方法。

 

一.实现评论功能方式:

二、自己写代码创建评论模型

1.模型包含的内容:

2.在项目mysite中创建应用APP---》comment

3.models中创建模型

 1 from django.db import models
 2 from django.contrib.contenttypes.fields import GeneriForeignKey
 3 from django.contrib.contenttypes.models import ContentType
 4 
 5 
 6 class Comment(models.Model):
 7     content_type = models.ForeignKey(ContentType,on_delete=models.DO_NOTHING)
 8     object_id = models.PositiveIntegerField()
 9     content_object = GenericForeignKey('content_type','object_id')     #评论对象
10   
11     text = models.TextField()
12     comment_time = models.DateTimeField(auto_now_add=True)
13     user = models.ForeignKey(User,on_delete=models.DO_NOTHING)

15 class Meta:
ordering = ['-comment_time']

4.后台显示

1 from django.contrib import admin
2 from .models import Comment
3 
4 @admin.register(Comment)
5 class CommentAdmin(admin.ModelAdmin):
6     list_display = ('content_object','text','comment_time','user')

5.settings中注册应用。

6.同步数据库。

7.在blog_detail中设置两个区域作为评论提交区域和评论列表。

7.评论需要登录用户

通过request的user属性判断用户是否登录  request.user

django2.0以上用render取代render_to_response  用右键高级查找替换。

学习参考Django文档中author用户认证, 使用request.user的is_authenticated属性判断是否登录。

8.在blog_detail.html中进行用户登录判断

<div class="row">
    <div class="col-xs-10 col-xsoffset-1">
        <div class="comment-area">   #area表示区域
             <h3 class="comment-title">提交评论</h3>
             {% if user.is_authenticated %}
                 {{ user.username }},欢迎评论!
<form action="{% url 'update_comment' %}" method="POST">
{% csrf_token %}
<textarea id="commenttext" name="text"></textarea> #textarea文本域
<input type="hidder" name="object_id" value="{{blog.pk}}"> #hidder隐藏不可见
<input type="hidder" name="content_type" value="blog">
<input type="submit" value="提交评论">
</form> {% else %} 未登录,登陆之后方可评论。
<form action="{% url 'login' %}" method="POST">
{% csrf_token %} <span>用户名:</span>
<input type="text" name="username"><br> <span>密 码: </span>
<input type="password" name="password">
<input
type="submit" value="登录"> </form> {% endif %}
<
div class="comment-area">
<h3 class="comment-area-title">评论列表</h3>
</div>

修改css样式

div.comment-area{
    margin-top:2em;
}
h3.comment-area-title{
    border-bottom:1px solid #ccc;
    padding-bottom:0.5em;
}

 

9.登录网址设置   在mysite.urls中增加 path('login/',views.login,name="login"),

在mysite.views设置处理方法:

from django.contrib import auth
def login(requestt):
    username = request.POST.get('username','')
    password = request.POST.get('password','')
    user = auth.authenticcate(request.username=username,password=password)  #用户密码验证
referer = request.META.get('HTTP_REFERER','home') #从请求头获取原来页面,没有时返回首页。 if user is not None: #登录 auth.login(request,user)
return redirect(referer,reverse('home')) #reverse反向解析重新定向到原来页面
else: return render(request,'error.html',{''messgage':'用户名或密码不正确'})

10.新建登录错误页面。公共template中建立error.html。

复制home页面修改。

{% extem 'base.html' %}
{% load  staticfiles  %}

{% block title %}
     我的网站 | 错误
{% endblock %}

{% block nav_home_avtive %}active{% endblock %}

{% block content %}
    {{message}},<a href="{{ redirect_to }}">返回</a>
{% endblock %}

11.CSRF验证失败,需要在模板<form>中增加标签{% csrf_token %}  表示csrf令牌。

12.blog_detail页面继续添加提交评论内容。

13.对于detail页面提交的内容进行处理,在comment的views.py 中写处理方法。

def update_comment(request):
    user = request.user
if not user.is_authenticaed:
return render(request,'error.html',{'message':'用户未登录'})
text = request.POST.get('text','').strip()
if text == '':
return render(request,'error.html',{'message':'评论内容为空’})

try:
content_type = request.POST.get("content_type",'')
content_id = int(request.POST.get('content_id',''))
model_class = ContentType.objects.get(model=content_type).mode_class() #获取对应的模型
model_obj = model_class.objects.get(pk=object_id)
except Exception as e:
returm render(request,'error.html',{'message':'评论对象不存在'})

comment= comment() #实例化对象
comment.user = user
comment.text = text
comment.conent_object = model_obj
comment.save()

referer = request.META.get('HTTP_REFERER',reverse('home'))
return redirect(referer)

14.在comment的urls中添加path

from django.urls import path
from . import views 

urlpatterns = [
    path('update_comment',views.update_comment,name='update_comment')
]

15.全局路由中加入

path('comment/',include('comment.urls'))

16.在detail方法中获取评论内容,传出给detail页面的评论列表显示。

17.前端页面

18.继续修改detail方法

19.优化页面  使用bootstrap优化。在form标签中加class="form-control"。

 

转载于:https://www.cnblogs.com/nanfeiyan/p/10268492.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 你可以回答这个问题。django-vue-admin 是一个基于 Django 和 Vue.js 的全栈开发框架,可以快速搭建后台管理系统。它提供了丰富的组件和插件,可以帮助开发者快速构建出美观、易用的管理界面。 ### 回答2: django-vue-admin是一个基于Django和Vue.js开发的开源管理系统框架,旨在帮助开发者快速构建和定制现代化的管理系统。它采用前后端分离的架构,后端使用Django提供API接口,前端使用Vue.js进行展示和交互。 使用django-vue-admin,开发者可以快速搭建一个具备基本功能的管理系统。框架提供了一套完整的通用模型和视图,开发者只需根据自己的需求进行配置和扩展即可实现快速开发。同时,它采用了模块化和组件化的设计,开发者可以方便地替换和定制界面的各个组件,实现个性化的界面展示。 django-vue-admin还提供了丰富的功能模块,如用户管理、权限管理、角色管理、菜单管理等,开发者可以根据项目需要进行选择和集成。框架还支持多语言和多主题的配置,方便开发者根据不同用户需求进行界面定制。 此外,django-vue-admin还面向中小型项目进行了性能优化,采用了异步加载、缓存和CDN加速等技术,提高了系统的响应速度和用户体验。 总的来说,django-vue-admin是一个强大而灵活的管理系统开发框架,它简化了开发者的开发流程,提高了开发效率。无论是快速搭建简单的管理系统,还是进行个性化的定制开发,都可以选择django-vue-admin作为开发工具。 ### 回答3: django-vue-admin 是一个用于快速开发后台管理系统的开源项目。它的主要特点是结合了 Django 和 Vue.js 框架的优势,使开发者能够高效地创建功能完善、界面友好的管理系统。 django-vue-admin 提供了一套基础的后台管理功能,包括用户管理、角色管理、权限管理、日志管理等。开发者可以根据自己的需求进行功能定制和扩展。 django-vue-admin 的前端使用了 Vue.js 框架,通过组件化的方式构建用户界面,并且使用了 Element-UI 组件库来提供丰富的UI组件。这使得开发者能够快速搭建出现代化、响应式的管理系统界面。后端则使用了 Django 框架,提供了强大的数据处理和权限控制能力。 在开发上,django-vue-admin 使用了前后端分离的架构,前端和后端通过 API 进行通信。这使得开发者可以独立地进行前后端开发,提高了开发效率和团队协作能力。同时,由于前后端分离的优势,django-vue-admin 的性能也得到了明显的提升。 总之,django-vue-admin 是一个功能强大、易用、高效的后台管理系统开发框架。它能够帮助开发者快速开发出现代化的后台管理系统,并且具备良好的扩展能力。无论是个人开发者还是企业开发团队,都可以利用 django-vue-admin 来构建稳定、高效的管理系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值