Django开发博客-(5)完善主页开发_2

接上一章继续。

博客书写(编辑)页面

编辑页面已经实现接下来是编辑响应的函数部分。
使用request.POST[‘参数名’]来获取表单数据
models.Article.objects.create(title, content)来创建对象

具体实现如下。
首先增加一个html文件为edit_action.html
然后views增加一个响应,在这里我们选择编辑完成返回主页

def edit_action(request):
    title = request.POST.get('title', 'page_title')
    content = request.POST.get('content', 'page_content')
    models.Article.objects.create(title=title, content=content)
    //以上是创建新的数据库对象
    //下面是获取数据库对象显示(每次都这样获取确实效率很低
    //可以用redis缓存一下)
    articles = models.Article.objects.all()
    return render(request, 'myblog/myblog.html', {'articles':articles})

随之urls增加

    url(r'^edit/action$', views.edit_action, name='edit_action'),

然后修改一下html文件的表单响应

<form action="{% url 'blog:edit_action' %}" method="post">
{% csrf_token %}

特别注意要添加{% csrf_token %},因为Django安全性要求很高,否则会出现错误。
最终效果如下
这里写图片描述
图1 增加新文章

最后就是区别新文章和修改文章

新文章没有标题和内容,而修改文章则需要含义原标题和内容,也就是修改文章页面有文章对象。
所有我们可以根据文章的ID来获取文章对象,id是从1开始,我门设置当id=0时是新文章页面,否则是带有文章对象的编辑页面
接下来来编写代码
首先是修改响应代码views:

def edit_page(request, article_id):
    #0代表新文章页面(没有文章对象传递给前端)
    if str(article_id) == '0':
        return render(request, 'myblog/edit_page.html')
    #否在id代表了文章对象的id
    article = models.Article.objects.get(pk=article_id)
    return render(request, 'myblog/edit_page.html', {'article':article})

上面修改的views给edit_page添加了一个参数,所以urls修改让其能接受一个参数。

urlpatterns = [
    url(r'^blog/$', views.myblog),
    url(r'^article/(?P<article_id>[0-9]+)$', views.article_page, name='article_page'),
    url(r'^edit/(?P<article_id>[0-9]+)$', views.edit_page, name='edit_page'),
    url(r'^edit/action$', views.edit_action, name='edit_action'),
]

然后修改前端代码
让主页的新建文章带有一个0的参数,表明是新文章

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>博客主页</title>
</head>
<body>

{% for article in articles %}
    <a href="{% url 'myblog:article_page' article.id %}">{{ article.title }}</a>
    <br/>
{% endfor %}

<h3>
    <!--增加新文章页面会给edit_page函数传递默认参数 0 -->
    <a href="{% url 'myblog:edit_page' 0 %}">增加新文章</a>
</h3>

</body>
</html>

最后修改编辑页面edit_page.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>编辑</title>
</head>
<body>

<form action="{% url 'myblog:edit_action' %}" method="post">
    {% csrf_token %}

    <!--这个页面提交 会反馈给edit_action响应 在此相当于填充了一个数据对象 然后在edit_action
    中获取这个对象 检查id是0还是1  以此来创建新文章  还是原来的文章-->
    <input type="hidden" name="article_id" value="{{article.id | default:'0'}}"/>
    <label>博客标题
        <input type="text" name="title" value="{{article.title}}" style="width:300px;"/>
    </label>
    <br/>

    <label>博客内容
        <input type="text" name="content" value="{{article.content}}" style="width:300px;height:200px"/>
    </label>
    <br/>
    <input type="submit" value="点击提交">
</form>

</body>
</html>

上面完成了页面设置,接下来只需要编辑页面的获取需要根据id是0(新页面没有文章对象)是1带有文章对象,即有数据。
修改views的响应也就是编辑

def edit_action(request):
    title = request.POST.get('title', 'page_title')
    content = request.POST.get('content', 'page_content')
    article_id = request.POST.get('article_id', '0')

    if article_id == '0':
        # 创建一个数据库对象(新) 然后返回主页
        # 主页需要显示全部的数据库列表
        models.Article.objects.create(title=title, content=content)
        articles = models.Article.objects.all()
        return render(request, 'myblog/myblog.html', {'articles':articles})

    # 获取当前需要编辑的文章对象 然后传递给前端
    article = models.Article.objects.get(pk=article_id)
    article.title = title
    article.content = content
    article.save()
    return render(request, 'myblog/atricle_page.html', {'article':article})

查看效果
这里写图片描述
图2 编辑文章

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值