Django的博客项目创建(4)

利用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'),

]

目前效果图:
主页界面
详情页面

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的公寓报修管理系统,源码+数据库+毕业论文+视频演示 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本公寓报修管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此公寓报修管理系统利用当下成熟完善的Spring Boot框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的MySQL数据库进行程序开发。公寓报修管理系统有管理员,住户,维修人员。管理员可以管理住户信息和维修人员信息,可以审核维修人员的请假信息,住户可以申请维修,可以对维修结果评价,维修人员负责住户提交的维修信息,也可以请假。公寓报修管理系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 关键词:公寓报修管理系统;Spring Boot框架;MySQL;自动化;VUE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值