Django_完善博客

2018-03-16  本文已影响0人  be_keeper

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

页面介绍

    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()

修改完成!

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

上一篇下一篇

猜你喜欢

热点阅读