通过写一个博客项目,来串联自己的知识点,并总结一些小的技巧
页面介绍
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()
修改完成!
至此,一个简单的博客就做完了,可以一个博客的基本功能。