Python--Django开发速成(3)

        本文主要讲解在的Python--Django开发速成(2)基础上添加博客文章修改功能,主要思路如下:

(1)每个博客都是有id的,id是由数据库自动生成的,而id有一个特点,就是没有0值。

(2)若要修改已有的文章,那么可以读取其id,从而后取其他内容。

(3)若要新建文章,则视id值为0,从而实现新建文章与编辑文章共用一个视图html而不使程序出错。

一、程序代码:

1、blog/views.py:

from django.shortcuts import render
from . import models

# Create your views here.

def index(request):
    articles=models.Article.objects.all()
    return render(request, 'blog/index.html',{'articles':articles})

def article_page(request,article_id):
    article=models.Article.objects.get(pk=article_id)
    return render(request,'blog/articlepage.html',{'article':article})

#控制编辑页面视图
def edit_page(request,article_id):
    #若id值为0,不传入文章数据,否则传入
    if str(article_id)=='0':
        return render(request,'blog/editpage.html')
    article=models.Article.objects.get(pk=article_id)
    return render(request,'blog/editpage.html',{'article':article})

#控制编辑行为
def edit_action(request):
    #获得表单数据
    title=request.POST.get('title','TITLE')#'TITLE,默认值'
    content=request.POST.get('content','CONTENT')
    article_id=request.POST.get('article_id','0')
    #若id为0,则表示为新建的文章,创建新数据
    if article_id=='0':
        models.Article.objects.create(title=title, content=content)
        articles = models.Article.objects.all()
        return render(request, 'blog/index.html', {'articles': articles})
    #若id不为0,则保存数据
    article=models.Article.objects.get(pk=article_id)
    article.title=title
    article.content=content
    article.save()
    return render(request,'blog/articlepage.html',{'article':article})

2、blog/urls.py:

from django.urls import path,re_path
from . import views
#此代码很重要,要与应用名称一致
app_name = 'blog'

urlpatterns = [
    #通过正则表达式设定该应用的访问url,此处还传入了文章id
    #设置视图的方法为views.article_page
    #设置url的name属性以访问到
    path('', views.index, name='index'),
    re_path(r'article/(?P<article_id>[0-9]+)$', views.article_page,name='article_page'),
    #设置编辑页面的url,并传入article_id
    re_path('edit/(?P<article_id>[0-9]+)$',views.edit_page,name='edit_page'),
    re_path('edit/action$',views.edit_action,name='edit_action'),
]

二、视图代码:

 1、index.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>
    {# 当新建文章时,视id为0#}
    <a href="{% url 'blog:edit_page' 0 %}">新文章</a>
</h1>

{# 循环数据库获取所有文章#}
{% for article in articles %}
    {# href格式,url app_name:url_name 参数 #}
    <a href="{% url 'blog:article_page' article.id %}">{{ article.title }}</a>
    <br/>
    
{% endfor %}

</body>
</html>

2、articlepage.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>articlepage</title>
</head>
<body>
{# 直接显示后台的数据变量 #}
<h1>{{ article.title }}</h1>
<br/>
<h3>{{ article.content }}</h3>
<br/><br/>

{# 修改文章时,传入id并进入文章编辑页面 #}
<a href="{% url 'blog:edit_page' article.id %}">修改文章</a>
</body>
</html>

3、editpage.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Edit Page</title>
</head>
<body>
<form action={% url 'blog:edit_action' %} method="post">
    {% csrf_token %} {# csrf标记 防范跨站请求伪造 #}
    {# 判断,若id不为0,则将文章标题以及内容加载在页面中 #}
    {% if article %}
        <input type="hidden" name="article_id" value="{{ article.id }}" />
        <label>文章标题
            <input type="text" name="title" value="{{ article.title }}"/>
        </label>
        <br/>
        <label>文章内容
            <input type="text" name="content" value="{{ article.content }}"/>
        </label>
        <br/>
    {# 判断,若id为0,则不加载文章标题以及内容的值 #}
    {% else %}
        <input type="hidden" name="article_id" value="0" />
        <label>文章标题
            <input type="text" name="title"/>
        </label>
        <br/>
        <label>文章内容
            <input type="text" name="content"/>
        </label>
        <br/>
    {% endif %}
    <input type="submit" value="提交">

</form>

</body>
</html>

三、测试:

1、启动cmd类工具,进入项目文件夹,输入命令:

python manage.py runserver

2、打开浏览器,输入localhost:8000/blog,即可进入博客界面:

3、点击新文章,即可新建文章,注意url最后是0:

4、点击某个文章标题,即可查看文章内容:

5、再点击修改文章,即可对文章进行编辑,界面与新建文章相同,只不过文字会自动加载:

6、修改之后点击提交,即可存储并重新进入文章详情页:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值