增加文章
前面我们讲到了在Django的后台添加文章,虽然很简单,但是我们并不能学到什么知识。现在我们在前端进行增加文章。
一、改写模板,展示我的文章列表
和前面的数据展示浅谈一样,不同的是,之前展示的是全部文章,这里我们展示的是自己写的文章。
- 路由
article/urls.py
path('my_articles/',views.my_articles,name='my_articles'),
- 逻辑层
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)
- 数据展示层
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>
- 跳转接口
templates/index.html
<li class="nav-item">
<a class="nav-link" href="{% url 'article:my_articles' %}">我的博客</a>
</li>
和之前的数据展示几乎没有差别,不同的地方就是逻辑层对数据进行了条件查找。
点击我的博客,就显示出了作者是当前登录账号的所有文章列表。
发表新文章
- 路由
article/urls.py
path('add_article/', views.add_article, name='add_article'),
from表单
在前面的登录时使用过form表单,可以翻翻
from django import forms
from article.models import Article
class ArticleForm(forms.ModelForm):
class Meta:
model = Article
fields = ('art_title', 'art_body')
- 业务逻辑层
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,代表不要提交到数据库。
- 数据展示层
<!-- 提交文章的表单 -->
<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>
添加效果如下: