>[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-首頁模板