Django搭建个人博客---增加文章

增加文章

前面我们讲到了在Django的后台添加文章,虽然很简单,但是我们并不能学到什么知识。现在我们在前端进行增加文章。

一、改写模板,展示我的文章列表

和前面的数据展示浅谈一样,不同的是,之前展示的是全部文章,这里我们展示的是自己写的文章。

  1. 路由article/urls.py

    path('my_articles/',views.my_articles,name='my_articles'),
  1. 逻辑层article/views.py

def my_articles(request):
    my_articles = Article.objects.filter(author=request.user)
    context = {
        'my_articles': my_articles,
    }
    return render(request, 'my_articles.html', context)
  1. 数据展示层templates/my_articles.html

<div class="row">
        {% for my_article in my_articles %}
            <div class="col-sm-4 mt-3">
                <div class="card card-primary">
                    <div class="card bg-light text-dark">
                        <div class="card hearder">
                            <h3>{{ my_article.art_title }}</h3>
                        </div>
                    </div>
                    <div class="card-body">
                        <p>{{ my_article.art_body }}</p>
                    </div>

                    <div class="card-footer">
                        {{my_article.created_time}}
                        <a href="article_datail.html" class="btn btn-info" role="button">阅读</a>
                    </div>
                </div>
            </div>
        {% endfor %}
    </div>
  1. 跳转接口templates/index.html

      <li class="nav-item">
                    <a class="nav-link" href="{% url 'article:my_articles' %}">我的博客</a>
                </li>

和之前的数据展示几乎没有差别,不同的地方就是逻辑层对数据进行了条件查找。

点击我的博客,就显示出了作者是当前登录账号的所有文章列表。


发表新文章

  1. 路由article/urls.py

    path('add_article/', views.add_article, name='add_article'),
  1. from表单

在前面的登录时使用过form表单,可以翻翻

from django import forms

from article.models import Article

class ArticleForm(forms.ModelForm):     class Meta:         model = Article         fields = ('art_title', 'art_body')

  1. 业务逻辑层article/views.py

def add_article(request):
    if request.method == 'POST':
        articleforms = ArticleForm(data=request.POST)
        if articleforms.is_valid():
            new_article = articleforms.save(commit=False)
            new_article.author = request.user
            new_article.save()
            return redirect(reverse('article:my_articles'))
        else:
            context = {
                'msg': '数据错误,添加失败'
            }
            return render(request, 'add_article.html', context)
    else:
        articleform = ArticleForm()
        context = {
            'articleform': articleform,
        }
        return render(request, 'add_article.html', context)
  • 使用save(commit=False)方法,更新对象属性,但并不向数据库真正提交数据。

  • save()方法中传递一个参数commit,赋值为False,代表不要提交到数据库。

  1. 数据展示层

<!-- 提交文章的表单 -->
        <form method="post" action="">
            {% csrf_token %}
            {{ msg }}

            <!-- 文章标题 -->             <div class="form-group">                 <!-- 标签 -->                 <label for="title">文章标题</label>                 <!-- 文本框 -->                 <input type="text" class="form-control" id="title" name="art_title">             </div>             <!-- 文章正文 -->             <div class="form-group">                 <label for="body">文章正文</label>                 <!-- 文本区域 -->                 <textarea type="text" class="form-control" id="body" name="art_body" rows="12"></textarea>             </div>             <!-- 提交按钮 -->             <button type="submit" class="btn btn-primary">完成</button>         </form>

添加效果如下:




上一篇: Django 管理图片
下一篇: Django引入markdown