>[success] # 评论功能
~~~
1.整个评论功能在两个地方,第一个地方是在每一个文章详情,第二个地方再友情链接
2.整体的处理逻辑,有一个类负责保存处理提交的评论,一个类负责展示所有消息
~~~
>[success] # 处理提交评论
>[danger] ##### url
~~~
from comment.views import CommentView
url(r'^comment/$', CommentView.as_view(), name='comment'),
~~~
>[danger] ##### 在comment/views 文件下创建CommentView 处理
~~~
1.继承模板类TemplateView,这个类主要针对的是模板处理,没有指定的数据库处理返回值
2.分别重写 他们的get 和post 方法
3.由于forms 验证继承的是modelfroms 所有在这里 直接使用save 保存数据库内容
~~~
~~~
class CommentView(TemplateView):
# 设置访问请求 小写
http_method_names = ['post']
template_name = "comment/result.html"
def get(self, request, *args, **kwargs):
return super(CommentView, self).get(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
commnent_form = CommentForm(request.POST)
if commnent_form.is_valid():
# 直接保存内容
# 想在返回的form 做添加的 首先设置 不提交
# instance = commnent_form.save(commit=False)
# instance.target =target
# instance.save()
commnent_form.save()
succeed = True
# 重新跳转
return redirect(target)
else:
succeed = False
context = {
'succeed':succeed,
'form': commnent_form,
'target':target,
}
return self.render_to_response(context)
~~~
>[danger] ##### 在comment/forms 文件下创建CommentForm 处理form 验证问题
~~~
1.可以直接绑定验证
~~~
~~~
from django import forms
from django.forms import widgets
from .models import Comment
class CommentForm(forms.ModelForm):
target = forms.CharField(
widget=widgets.HiddenInput,
)
nickname = forms.CharField(
label='昵称',
max_length=50,
widget=widgets.Input(
attrs={'class': 'form-control', 'style': "width: 60%;"},
)
)
email = forms.CharField(
label='Email',
max_length=50,
widget=widgets.EmailInput(
attrs={'class': 'form-control', 'style': "width: 60%;"},
)
)
website = forms.CharField(
label='网站',
max_length=100,
widget=widgets.URLInput(
attrs={'class': 'form-control', 'style': "width: 60%;"},
)
)
content = forms.CharField(
label="内容",
max_length=500,
error_messages={'required':"请认真填写"},
widget=widgets.Textarea(
attrs={'rows': 6, 'cols': 60, 'class': 'form-control'},
)
)
def clean_content(self):
content = self.cleaned_data.get('content')
if len(content) <10:
print(1)
raise forms.ValidationError('多给一些建议吧')
return content
class Meta:
model = Comment
fields = ['target' ,'nickname', 'email', 'website', 'content']
~~~
>[danger] ##### 在template /comment 文件下创建 bolck 展示评论模板
~~~
1.注意现在的评论列表还不能用,要经过下面的操作才可以
~~~
~~~
<hr/>
<div class="comment">
<form action="/comment/" method="post">
{% csrf_token %}
{{ comment_form }}
<input class="btn btn-info" type="submit" value="提交评论">
</form>
<!-- 评论列表 -->
<ul class="list-group">
{% for comment in comment_list %}
<li class="list-group-item">
<div class="nickname">
<a href="{{ comment.website }}">{{ comment.nickname }}</a> <span>{{ comment.created_time }}</span>
</div>
<div class="comment-content">
{% autoescape on %}
{{ comment.content }}
{% endautoescape %}
</div>
</li>
{% endfor %}
</ul>
</div>
~~~
>[success] # 评论列表父类
~~~
1.因为评论在是,友情链接 和文章都展示,所以这里我们做了一个父类集成
~~~
>[danger] ##### 在comment/views 创建一个展示父类
~~~
1.get_comment 查询 对应评论的链接,在对应的页面展示
~~~
~~~
class CommentShowMixin(object):
def get_comment(self):
target = self.request.path
comment = Comment.objects.filter(target=target)
return comment
def get_context_data(self, **kwargs):
kwargs.update({
'comment_form': CommentForm(initial={'target':self.request.path}),
'comment_list':self.get_comment()
})
return super(CommentShowMixin, self).get_context_data(**kwargs)
~~~
>[danger] ##### 使用
~~~
# 文章详情页 继承即可
class PostView(CommentShowMixin,DeleteView):
~~~
- 网络原理
- 为搭建框架做准备
- 简单认识网路
- 自定义模拟网站案例
- 优化最终框架
- 数据存储 -- data
- 用户个人信息存储 -- User.txt
- 路由映射 -- routes
- 处理用户信息 -- routes_static.py
- 保存静态文件 -- static
- templates -- html 集中处理模块
- 首页 -- index.html
- 登陆 -- login.html
- 用户注册页面 -- register
- 日志模块 -- log.gua.txt
- 启动文件--server.py
- orm处理 -- model.py
- 日志模块 -- utils.py
- 两种数据库类型
- 传统数据库了解篇
- 前端快速入门
- JS简单使用入门
- css简单快速入门
- DJANGO
- virtualenv-创建虚拟环境
- 项目结构
- django-admin中文配置
- django-打印sql语句
- django-基础
- 认识MVC和MTV
- Django--初识
- Django--初识案例
- Django-FBV/CBV
- Django--常用input 交互
- Django-url
- Django-url.py 配置
- Django-include 使用
- Django-url name
- Django-ORM
- ORM-数据库配置
- ORM-model字段
- ORM-model字段解释
- ORM-字段选项
- ORM-查询
- ORM-四种常用查询方法
- ORM-三种获取数据
- ORM-其他查询方式
- ORM-条件查询双线
- ORM-Q和F条件使用
- ORM-三种数据库交互
- 案例 -- 一对多
- ORM-技巧/常见问题
- ORM-N+1 问题
- ORM-并发的处理
- ORM-数量查询、
- ORM-正向反向查询
- ORM-基础案例一
- ORM-基础一对多案例
- Django-templates
- Django-模板的继承
- Django-模板的过滤
- Django-自定义模板的过滤
- Django-cookie
- Django-cookies 装饰器
- Djang-session
- Django-CSRF
- Django-中间件 -- 后续了解
- Django- 缓存 -- 没有深入了解
- Django-form
- From-ajax
- form-内部验证处理
- form-属性
- form-常用的标签字段
- form-常用的下拉和选择
- form-widget速查
- Django-ajax序列化
- Django-多种ajax写法
- ajax-原生写法
- ajax-$写法
- ajax-ifram
- Django-ajax图片上传
- ajax-原始写法
- ajax-正常写法
- iframe+form
- 实战写法
- Django-常用自编写组件
- Django-双菜单组合搜索
- Django - 多菜单组合搜索
- Django-分页
- django-综合基础
- 综合基础-render
- django-admin
- admin-页面配置
- admin-字段配置
- admin-编辑页面
- admin-forms验证
- admin-创建抽象类
- django-验证码
- 验证码-第三方生成库
- 验证码-view.py使用
- 验证码-注意引入Monaco.ttf
- django-用户注册
- 注册-form 模块
- 注册-views 模块
- 注册-html模块
- 注册-model模块
- django-用户登录三种
- session登录
- form-session 写法
- view-写法
- Html-写法
- model-写法
- 继承类登录
- 外键关联登录
- django-简单的student 管理案例
- app-urls.py
- app-models.py配置
- admin-admin.py配置
- app-form.py 和数据库关联的写法
- app-FBV_views.py
- app-CBV_views.py
- templates-index.html
- django-博客系统
- APP目录-models.py 创建
- APP目录-基础展示数据分析
- APP目录-基础数据展示cls
- ListView
- DetailView
- FormView
- 额外功能拓建
- 添加文章搜索/用户文章查询功能
- 增加一个友情链接
- 增加一个评论模块
- App-利用Bootstrap4 搭建样式
- 项目crm
- 思维导图
- perfectCRM-项目名字
- settings.py-配置
- view.py-登陆/登出函数
- crm-app文件
- model.py-表的创建
- admin.py-注册后台
- view.py-视图层
- static-静态文件
- css
- bootstrap.min.css
- dashboard.css
- ie10-viewport-bug-workaround.css
- signin.css
- fonts
- imgs
- js
- jquery.js
- bootstrap.min.js
- holeder.js
- ie10-viewport-bug-workaround.js
- ie-emulation-modes-warning.js
- plugins
- html模板文件-templates
- crm
- index.html-首页模板