美文网首页
Django_完善博客

Django_完善博客

作者: be_keeper | 来源:发表于2018-03-16 08:09 被阅读0次

    通过写一个博客项目,来串联自己的知识点,并总结一些小的技巧

    页面介绍

        1.博客主页面

        2.博客文章内容页面

        3.博客撰写页面

    一.博客主页面

      主页面内容

         1.文章标题列表,超链接

         2.发表博客按钮(超链接)

    列表编写思路:1.取出数据库中所有文章对象,2.将文章对象们打包成列表,传递到前端,3.前端页面把文章以标题超链接的形式逐个列出

    模板For循环

              {% for XX in XXS %}

              HTML

              {% endfor %}

    eg:

    在views.py文件如下:

    def indexhtml(request):

        articles= Acticle.objects.all()

       return render(request,'blog/index.html',{'articles':articles})

    objects.all()得到的是一个列表

    在HTML文件中取出来

    <ol>

    {%for i in articles %}

    <a herf=""><li>{{i.title}}</li></a>

    {%endfor %}

    </ol>

    运行效果:

    博客的主要面完成!



    二.博客文章页面

    页面内容

    标题,文章内容,修改文章按钮(超链接)

    eg:

    1.首先要在views.py 中再写一个响应函数

    def article_page(request,article_id):

          article= Acticle.objects.get(pk=article_id)

          return render(request,'blog/article.page.html',{'article':article})

    article_id 是前台返回的id 

    2.编写HTML

    3.配置url  

    url(r'^article/(?P<article_id>[0-9]+)$',views.article_page),

    python 的正则表达式,写一个article_id的分组,必须与前面的响应函数的请求参数一致。

    4.运行,在浏览器中输入localhost:8080/blog/article_page/1

    就会显示出来第一条文章的内容

    注意:地址栏中一定要写“1”,否则会报错!

    在Django2.0以后的版本,是'article/(<int:article_id>/'就可以了

    URL传递参数:

         参数写在响应函数中request后,可以有默认值

          URL正则表达式:r'^article/(?P<article_id>[0-9]+)$'

          URL正则中的组名必须和响应函数的参数名保持一致!


    插入:Django中的超链接

    超链接目标地址

          hrefs后面是目标地址

         template中可以使用“{% url “app_name”:“url_name” param %}”

          其中app_name和url_name都在url中配置

    再配URL

    url函数的名称

             1.根urls.py,写在include()的第二个参数位置,namespqce="blog"

            2. 应用urls.py下则写在url()的第三个参数位置,name = "article"

            3.主要取决于是否使用incude引用了另一个url配置文件

    eg:

    在根目录urls.py下修改:

          url(r'^blog/',include('blog.urls',namespace='blog')),

    在应用urls.py修改:

           url(r'^article/(?P[0-9]+)$',views.article_page,name="article_page"),

    在HTML中修改:

    注意传递过去i.id 参数

    在浏览器中运行,可以实现跳转


    3.博客撰写页面

    页面内容

               标题编辑栏,文章内容编辑区域,提交按钮

    eg:

    1.编辑一个edit_page静态页面

    2.在views.py文件中渲染

    def edit_page(request):

         return render(request,'blog/edit_page.html')

    在urls.py中配置地址:

        url(r'^edit_page/$',views.edit_page,name='edit_page'),

    3.编写页面提交响应函数

    在views.py页面再写一个函数

    def edit_acticle(request):

        title= request.POST.get('title','TITLE')       //获取提交的值,后面是默认值

        content= request.POST.get('content','CONTENT')

        Acticle.objects.create(title=title,content=content)        //创建数据写入数据表

    # 写入数据之后返回到主页面

           articles= Acticle.objects.all()

            return render(request,'blog/index.html', {'articles': articles})

    4.配置该响应函数的地址

    url(r'^edit_article/$',views.edit_acticle,name='edit_acticle'),

    5.在提交的HTML页面中,在form写上该url地址,就可以了。

    总结:

          涉及一个安全问题,post提交方式,必须写上csrf_token

         使用request.POST['参数名']获取表单数据

         models.Acticle.objects.create(title,content)创建对象

    4.修改页面

    修改页面有自己的标题和内容

    首先因为编辑页面和修改页面的跳转页面很相似,修改页面里面有内容,而新建的编辑页面里面有没内容,为了防止页面冗余,而设置为同一页面,根据传递参数的不同而实现呈现不同的效果。

    eg:

    在views.py文件中:

    def edit_page(request,article_id):

          if str(article_id)== '0':

              return render(request,'blog/edit_page.html')

         article= Acticle.objects.get(pk=article_id)

           return render(request,'blog/edit_page.html', {'article': article})

    在显示编辑页面的响应函数中,如果为0,则显示空的编辑,如果不是,则显示修改页面

    def edit_acticle(request):

        title= request.POST.get('title','TITLE')

    content= request.POST.get('content','CONTENT')

    article_id= request.POST.get('article_id','0')

    if article_id== '0':

            Acticle.objects.create(title=title,content=content)

    # 写入数据之后返回到主页面

            articles = Acticle.objects.all()

    # return render(request, 'blog/index.html', {'articles': articles})

            return HttpResponseRedirect('/blog/indexhtml')

    article= Acticle.objects.get(pk=article_id)

    article.title= title

    article.content= content

    article.save()

    return render(request,'blog/article.page.html', {'article': article})

    提交页面的响应函数:如果是新页面编辑,则显示为创建新的数据于数据表

    如果是修改页面,则根据传递过来的ID查找出对应的数据,修改数据。

    总结:

    1.传递给后台的参数,可以创建一个隐藏的标签。

    2.修改数据库参数

    art =Acticle.objects.get(pk=1)

    art.title=title

    art.save()

    修改完成!

    至此,一个简单的博客就做完了,可以一个博客的基本功能。

    相关文章

      网友评论

          本文标题:Django_完善博客

          本文链接:https://www.haomeiwen.com/subject/qogfqftx.html