1 Star 0 Fork 0

xiangyang / my_blog_context

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
10_添加文章.md 4.29 KB
一键复制 编辑 原始数据 按行查看 历史
xiangyang 提交于 2020-10-07 01:06 . update_art and Markdown规范化

增加文章

前面我们讲到了在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>

添加效果如下:

Python
1
https://gitee.com/xiangyang929/my_blog_context.git
git@gitee.com:xiangyang929/my_blog_context.git
xiangyang929
my_blog_context
my_blog_context
master

搜索帮助