Django的博客项目创建(4)
2018-03-07 21:44
309 查看
利用Django实现的功能如下:
Post模型优化增加类别显示功能
增加新的应用comments
具体实现过程如下:
1.模型优化,Post模型增加阅读量自动加1的功能:在模型中增加increase_views方法:
class Post(models.Model): ... def increase_views(self): self.views += 1 #只更新views字段,提高效率。 self.save(update_fields=['views'])
在视图函数中修改阅读量加1的功能实现:
def detail(request, pk): post = get_object_or_404(Post,pk=pk) #调用post对象方法,阅读量加1 post.increase_views() ...
2.增加类别显示功能:
在视图函数中增加category模板渲染:
def category(request, pk): post_list = Post.objects.filter(category_id=pk).order_by('-created_time') return render(request, 'blog/index.html', context={'post_list':post_list})
在模板中增加category的url生成功能:
<div class="widget widget-category"> <h3 class="widget-title">分类</h3> {% get_categories as category_list %} <ul> {% for category in category_list %} <li> <a href="{% url 'blog:category' category.pk %}">{{ category.name }} <span class="post-count">(13)</span></a> </li>
在urls.py文件中增加category的url:
url(r'^category/(?P<pk>[0-9]+)/$', views.category,name='category'),
3.增加comments应用:
创建新应用comments:
python install startapp comments
创建comments模型:
与Post是外键连接关系
from django.db import models # Create your models here. class Comment(models.Model): name = models.CharField(max_length=100) email = models.EmailField(max_length=225) url = models.URLField(blank=True,null=True) text = models.TextField() created_time = models.DateTimeField(auto_now_add=True) modified_time = models.DateTimeField(auto_now=True) #需要外键连接到blogapp中的Post模型 post = models.ForeignKey('blogapp.Post', on_delete=models.CASCADE) def __str__(self): #后台显示的是评论的前20个字符 return self.text[:20]
在settings中安装该app:
INSTALLED_APPS = [ ... 'django.contrib.staticfiles', 'blogapp.apps.BlogappConfig', 'comments.apps.CommentsConfig', ]
创建表单froms.py:
from django import forms from .models import Comment class CommentForm(forms.ModelForm): class Meta: model = Comment fields = ['name', 'email', 'url', 'text']
增添跨域请求保护功能:
在模板中设置detail.html
<section class="comment-area" id="comment-area"> <hr> <h3>发表评论</h3> <form action="{% url 'comments:post_comment' post.pk %}" method="post" class="comment-form"> {% csrf_token %} <div class="row"> <div class="col-md-4"> <label for="{{ form.name.id_for_label }}">名字:</label> {{ form.name }} {{ form.name.errors }} </div> <div class="col-md-4"> <label for="{{ form.email.id_for_label }}">邮箱:</label> {{ form.email }} {{ form.email.errors }} </div> <div class="col-md-4"> <label for="{{ form.url.id_for_label }}">URL:</label> {{ form.url }} {{ form.url.errors }} </div> <div class="col-md-12"> <label for="{{ form.text.id_for_label }}">评论:</label> {{ form.text }} {{ form.text.errors }} <button type="submit" class="comment-btn">发表</button> </div> </div> <!-- row --> </form> ... </section>
创建评论显示视图函数:
from django.shortcuts import render,get_object_or_404,redirect # Create your views here. from blogapp.models import Post from .models import Comment from .forms import CommentForm def post_comment(request,post_pk): post = get_object_or_404(Post,pk=post_pk) if request.method == 'POST': #接受request中传入的POST数据,用于创建表单 form = CommentForm(request.POST) if form.is_valid(): #存到内存,不存到数据库 comment = form.save(commit=False) comment.post = post comment.save() #重定向到帖子对象 return redirect(post) #重新渲染原网页 else: comment_list = post.comment_set.all() context = { 'post':post, 'form':form, 'comment_list': comment_list } return render(request, 'blog/detail.html',context=context) #redirecth函数,当传入对象时,它会调用对象的get_absolute_url函数,反向生成url return redirect(post)
创建评论显示urls:
from django.conf.urls import url from . import views app_name = 'comments' urlpatterns = [ url(r'^comment/post/(?P<post_pk>[0-9]+)/$', views.post_comment, name='post_comment'), ]
添加comment.urls到根urls中:
urlpatterns = [ ... url(r'^archives/(?P<year>[0-9]{4})/(?P<month>[0-9]{1,2})/$', views.archives, name='archives'), url(r'^category/(?P<pk>[0-9]+)/$', views.category,name='category'), ]
目前效果图:
相关文章推荐
- Django的博客项目创建(3)
- django 使用pychme创建一个博客项目
- Django的博客项目创建(6)
- 【django】搭建博客教程(1)——环境搭建,项目创建及初步测试
- Django开发个人博客网站——3、使用pycharm创建博客项目
- Django的博客项目创建(5)
- Django的博客项目创建(2)
- 虚拟环境下Django创建、运行项目
- django 创建项目
- Django学习:创建项目和应用(2)
- Python一日一练101----Django创建简易博客(上)
- django-admin.py startproject 无法创建项目
- 一步一步利用django创建博客应用(二)
- Django无法创建项目解决办法
- 一步一步利用django创建博客应用(三)
- django项目部署到SAE上的个人博客
- django创建第一个项目
- django之创建第12个项目-加载图片
- Django创建项目前篇
- Django学习(一)---基本配置及创建项目、应用