Django_完善博客

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

页面介绍

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

修改完成!


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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,670评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,928评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,926评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,238评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,112评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,138评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,545评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,232评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,496评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,596评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,369评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,226评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,600评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,906评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,185评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,516评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,721评论 2 335

推荐阅读更多精彩内容