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

来源:互联网 发布:js监听页面大小变化 编辑:程序博客网 时间:2024/06/03 16:27

接上一章继续。

博客书写(编辑)页面

编辑页面已经实现接下来是编辑响应的函数部分。
使用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 编辑文章

原创粉丝点击