码迷,mamicode.com
首页 > 其他好文 > 详细

Django的学习(五)————实战问题

时间:2019-02-17 13:08:01      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:namespace   文章   article   ret   this   原来   copy from   port   正则匹配   

一、多参数问题:

首先是在添加一个新的参数,其次在url中把这个id传递过去

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

 

对于django2.0+的版本而言,使用正则匹配的时候需要导入re_path

 1 """
 2     this py file is copy from the file of name is myblog
 3 """
 4 from django.urls import path, re_path
 5 from django.conf.urls import url
 6 from . import views
 7 
 8 # 2.0版本以后用re_path来创建
 9 urlpatterns = [
10     re_path(rarticle/(\d), views.article_page),
11     re_path(rarticle, views.index),
12 
13 ]

 

将正则的内容括起来进行书写。

优化正则匹配,注意P是大写不是小写,且这个组名必须和添加到参数名保持一致。

1 urlpatterns = [
2     re_path(rarticle/(?P<article_id>[0-9]+), views.article_page),
3     re_path(rarticle, views.index),
4 
5 ]

 

二、创建url的响应对象:

 1 """
 2     this py file is copy from the file of name is myblog
 3 """
 4 from django.urls import path, re_path
 5 from django.conf.urls import url
 6 from . import views
 7 
 8 # 2.0版本以后用re_path来创建
 9 urlpatterns = [
10     re_path(rarticle/(\d), views.article_page),
11     re_path(rarticle, views.index),
12 
13 ]

 

三、超链接目标地址:

在django2.0+的版本中,app_name需要指出来:

1 app_name = blog2 urlpatterns = [
3     re_path(rarticle/(?P<article_id>[0-9]+), views.article_page, name=article_page),
4     re_path(rindex, views.index),
5 ]

 

注意:2.0+的版本中,要在使用name参数的url中添加app_name=‘blog‘,即应用名,否则后面的内容就会报错。因为这个是后遗症。

 

template中可以使用"{% url  ‘app_name:url_name‘  param %}"来完成对应的url的跳转。

其中app_name是应用名,url_name是目标网址,param是地址的参数。

url函数名称的位置参数:

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

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

主要取决于是否使用include引用了另一个url的配置文件

 

四、博客撰写界面:

1.编辑界面函数:

与原来的响应的方法一样:

 

 1 """
 2     this py file is copy from the file of name is myblog
 3 """
 4 from django.urls import path, re_path
 5 from django.conf.urls import url
 6 from . import views
 7 
 8 # 2.0版本以后用re_path来创建
 9 app_name = blog
10 urlpatterns = [
11     re_path(r^index/$, views.index),
12     re_path(r^article/(?P<article_id>[0-9]+)$, views.article_page, name=article_page),
13     re_path(r^edit/$, views.edit_page),
14 ]

 

 

2.编辑响应函数:

用request.POST[‘参数名‘]获取表单数据,get也是一样的。

和数据库的操作用的是models的类,所以用:

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

 

在后台中添加edit_action的响应函数:

1 def edit_action(request):
2     title = request.POST.get(title, TITLE)
3     content = request.POST.get(content, CONTENT)
4     models.Article.objects.create(title=title, content=content)
5     articles = models.Article.objects.all()
6     return render(request, blog/index.html, {"articles": articles})

 

 

在前端的响应界面:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Edit_page</title>
 6 </head>
 7 <body>
 8 <form action="{% url ‘blog:edit_action‘ %}" method="post">
 9     {% csrf_token %}
10     <label>文章标题
11         <input type="text" name="title"/>
12     </label>
13     <br/>
14     <label>文章内容
15         <input type="text" name="content"/>
16     </label>
17     <br/>
18     <input type="submit" value="提交">
19 </form>
20 </body>
21 </html>

在对应的响应中添加对应的后台响应函数。

注意:用post请求时,需要加上{% csrf_token%},因为django的安全性能好,所以这样才可以识别。

 

3.编辑修改响应的函数:

首先是编辑页面,由于在数据库中的存贮是从一开始的,所以我们在edit的编辑页面用的0。

view函数:

 

1 def edit_page(request, article_id):
2     if str(article_id) == 0:
3         return render(request, blog/edit_page.html)
4     article = models.Article.objects.get(pk=article_id)
5     return render(request, blog/edit_page.html, {article: article})

 

 

urls函数:

1 app_name = blog
2 urlpatterns = [
3     re_path(r^index/$, views.index),
4     re_path(r^article/(?P<article_id>[0-9]+)$, views.article_page, name=article_page),
5     re_path(r^edit/(?P<article_id>[0-9]+)$, views.edit_page, name=edit_page),
6     re_path(r^edit/action$, views.edit_action, name=edit_action),
7 ]

 

在html文件中默认一个输入的id,在后端获取这个id,如果id为0则返回初始页面。如果id不为0返回对象,分别给对象赋值。

article.title = title

article.save()

 

Django的学习(五)————实战问题

标签:namespace   文章   article   ret   this   原来   copy from   port   正则匹配   

原文地址:https://www.cnblogs.com/future-dream/p/10390450.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!