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

一、多参数问题:

首先是在添加一个新的参数,其次在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(r‘article/(\d)‘, views.article_page),
11     re_path(r‘article‘, views.index),
12
13 ]

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

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

1 urlpatterns = [
2     re_path(r‘article/(?P<article_id>[0-9]+)‘, views.article_page),
3     re_path(r‘article‘, 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(r‘article/(\d)‘, views.article_page),
11     re_path(r‘article‘, views.index),
12
13 ]

三、超链接目标地址:

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

1 app_name = ‘blog‘2 urlpatterns = [
3     re_path(r‘article/(?P<article_id>[0-9]+)‘, views.article_page, name=‘article_page‘),
4     re_path(r‘index‘, 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()

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

时间: 2024-11-13 09:10:40

Django的学习(五)————实战问题的相关文章

django book学习问题记录

—————————————————————————————————— 位置:第五章<模型> 问题描述: >>> p1 = Publisher.objects.create(name='Apress', ... address='2855 Telegraph Avenue', ... city='Berkeley', state_province='CA', country='U.S.A.', ... website='http://www.apress.com/') >

第六章 Django框架学习——ORM详解

第六章 Django框架学习--ORM介绍与常用方法 一.ORM介绍 二.ORM中的常用字段和参数 三.ORM中的关系字段--一对一(OneToOneField) 四.ORM中的关系字段--多对多(ManyToManyField) 五.ORM中的元信息 一.ORM介绍(部分内容前面的章节已经介绍过,此处只做简单介绍) 什么是ORM(what): ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中. Django中的ORM: Django配置数据库 1.在se

NGUI 学习笔记实战——制作商城

Unity3D的uGUI听说最近4.6即将推出,但是目前NGUI等UI插件大行其道并且已经非常成熟,所以我们还是先看眼前吧. 一.实现思想 商城的功能是很多游戏都拥有的,按下一个界面按钮,弹出一个窗体. 然后是商城中的商品可以拖动,既可以用手,也可以用滑条等等,至于点击购买就不单单是UI层的事了.等到实现NDate的时候再进行讨论. 二.实现背景 1.NGUI->Open->Prefab tool bar ,拖一个black widget进去 2.之后布局如下,这些应该没什么难度,弄好锚点,d

Beaglebone Back学习五(PWM测试)

PWM测试 参考链接 1 Enable PWM on BeagleBone with Device Tree overlays 2Using PWM on the Beaglebone Black 3 Beaglebone Coding 101: Buttons and PWM 4 Using PWM outputs 5 beaglebone-black-cpp-PWM 6 Enabling PWM Support in the kernel 7 Beaglebone Back学习五(PWM测试

TweenMax动画库学习(五)

目录            TweenMax动画库学习(一)            TweenMax动画库学习(二)            TweenMax动画库学习(三)            TweenMax动画库学习(四)            TweenMax动画库学习(五)  

NodeJS学习五 之网页显示

我们新建一个Server.js. 然后运行cmd 找到server.js 路径.  node server.js 浏览器中输入http://localhost:8888/ 你会发现,网页上出现了 Hello World NodeJS学习五 之网页显示,布布扣,bubuko.com

Cmdlet开发与学习(五)

Parameter       在声明cmdlet参数的时候,我们使用了Parameter标识符,在这个标识符中,有些参数需要了解到. 强制参数 设置Mandatory=true即可. 对于强制参数,不管是在命令行中绑定,还是通过管道输入,在命令逻辑执行之前,它就必须绑定好.如果强制参数没有参数值的话,PowerShell会弹出对话框,要求用户提供参数值. 位置参数.       Position= n       有时,我们在使用Powershell的时候,发现仅仅是输入参数值,并没有指定具体

CCNA实验二十五 实战多种ACL访问控制 &nbsp;

CCNA实验二十五 实战多种ACL访问控制 环境:Windows XP .Pracket Tracert 5.3 . GNS3.0.7.2 目的:了解ACL作用并熟练在不同环境中配置ACL 说明: ACL是路由器和交换机接口的指令列表,用来控制端口进出的数据包并且可以保护网络,ACL适用于所有的被路由协议,如IP.IPX.AppleTalk等.ACL种类:标准ACL.扩展ACL.命名式ACL.基于时间ACL.自反ACL.动态ACL. 标准的ACL使用 1 ~ 99 以及1300~1999之间的数

Objective C 快速入门学习五

<一>继承和多态 @class Complex 声明类(同C++) 子类函数成员 super 访问父类 同C++类似 1.通过继承 在子类中添加新方法 2.通过继承 在子类中添加新成员 3.通过继承 实现多态(实现比较简单,通过Id通用类型作为父类) 4.重载 5.抽象类abstract作用:创建子类更容易:提供了处理所有派生子类的公共接口:抽象方法制定了标准协议,规范子类必须实现. 6.通用类型id,编译时不会做类型检查,在运行时才会动态绑定具体类型,指出错误. 静态类型在编译阶段就会指出错

深度学习Caffe实战笔记(19)Windows平台 Faster-RCNN 制作自己的数据集

"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 深度学习Caffe实战笔记(19)Windows平台 Faster-RCNN 制作自己的数据集 - gybheroin的博客 - 博客频道 - CSDN.NET gybheroin的博客 目录视图 摘要视图 订阅 [活动]2017 CSDN博客专栏评选 &nbsp [