一、多参数问题:

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

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

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

 """
this py file is copy from the file of name is myblog
"""
from django.urls import path, re_path
from django.conf.urls import url
from . import views # 2.0版本以后用re_path来创建
urlpatterns = [
re_path(r'article/(\d)', views.article_page),
re_path(r'article', views.index), ]

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

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

 urlpatterns = [
re_path(r'article/(?P<article_id>[0-9]+)', views.article_page),
re_path(r'article', views.index), ]

二、创建url的响应对象:

 """
this py file is copy from the file of name is myblog
"""
from django.urls import path, re_path
from django.conf.urls import url
from . import views # 2.0版本以后用re_path来创建
urlpatterns = [
re_path(r'article/(\d)', views.article_page),
re_path(r'article', views.index), ]

三、超链接目标地址:

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

 app_name = 'blog' urlpatterns = [
re_path(r'article/(?P<article_id>[0-9]+)', views.article_page, name='article_page'),
re_path(r'index', views.index),
]

注意: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.编辑界面函数:

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

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

2.编辑响应函数:

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

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

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

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

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

在前端的响应界面:

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Edit_page</title>
</head>
<body>
<form action="{% url 'blog:edit_action' %}" method="post">
{% csrf_token %}
<label>文章标题
<input type="text" name="title"/>
</label>
<br/>
<label>文章内容
<input type="text" name="content"/>
</label>
<br/>
<input type="submit" value="提交">
</form>
</body>
</html>

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

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

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

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

view函数:

 def edit_page(request, article_id):
if str(article_id) == '':
return render(request, 'blog/edit_page.html')
article = models.Article.objects.get(pk=article_id)
return render(request, 'blog/edit_page.html', {'article': article})

urls函数:

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

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

article.title = title

article.save()

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

  1. Django基础学习五_引入静态文件

    今天继续学习Django,今天主要掌握两个小点 一.如果为Django项目中引入静态文件 1.先要在project目录下创建static的目录,然后将jquery文件拷贝这个目录下就可以了 2.在pr ...

  2. Django初识 学习笔记一

    Django初识 学习笔记一 mvcviewsmodelstemplate. 一 MVC框架 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(c ...

  3. Django开发笔记五

    Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.页面继承 定义base.html: <!DOC ...

  4. Android JNI学习(五)——Demo演示

    本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...

  5. Android JNI学习(二)——实战JNI之“hello world”

    本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...

  6. Django中间件、csrf跨站请求、csrf装饰器、基于django中间件学习编程思想

    django中间件 中间件介绍 什么是中间件? 官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于在全局范围内改变Django的输入和输出. ...

  7. Django快速学习搭建blog项目

    新手学习Django,本文学习的文档是<Django Web开发指南>.好了我也是新手,没什么好说了,go!- 首先先确定环境,我是在linux(Ubuntu14.04 gnome)下. ...

  8. NGUI 学习笔记实战之二——商城数据绑定(Ndata)

    上次笔记实现了游戏商城的UI界面,没有实现动态数据绑定,所以是远远不够的.今天采用NData来做一个商城. 如果你之前没看过,可以参考上一篇博客   NGUI 学习笔记实战——制作商城UI界面  ht ...

  9. TweenMax动画库学习(五)

    目录            TweenMax动画库学习(一)            TweenMax动画库学习(二)            TweenMax动画库学习(三)            Tw ...

  10. 深度学习入门实战(二)-用TensorFlow训练线性回归

    欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者 :董超 上一篇文章我们介绍了 MxNet 的安装,但 MxNet 有个缺点,那就是文档不太全,用起来可能 ...

随机推荐

  1. EM算法之GMM聚类

    以下为GMM聚类程序 import pandas as pd import matplotlib.pyplot as plt import numpy as np data=pd.read_csv(' ...

  2. Maven 常见错误

    1.ReasonPhrase: Forbidden: |--- 1.注意用户的权限以及角色role的设置,一般是没有权限才会被禁止的. 2.Failed to collect dependencies ...

  3. verilog task1

    问题描述: 设计中需要重复多次施加一种激励,每一次激励的施加过程,都可以划分为4个部分,如图所示. 每一次施加的激励只有第二部分的数据有变化(数据格式无变化).所以顶层的Testbench代码如下: ...

  4. Python+Selenium学习--访问连接

    场景 web UI测试里最简单也是最基本的事情就是访问1个链接了. 在python的webdrive中,访问url时应该使用get方法. 代码 #!/usr/bin/env python # -*- ...

  5. 一分钟了解mongodb(转)

    mongo的由来 截取自英文俚语humongous,意为”巨大的”,是否表明mongodb在设计之初就是为大数据量处理而生呢? mongodb是个啥 mongodb是个可扩展.高性能.开源.面向文档( ...

  6. Bootstrap(10) 进度条媒体对象和 Well 组件

    一.Well 组件这个组件可以实现简单的嵌入效果. <!-- //嵌入效果 --> <div class="well">Bootstrap</div& ...

  7. 解决Eclipse添加新server时无法选择Tomcat7的问题

    在Eclipse中创建了一个Web工程后,需要将该工程部署到Tomcat中进行发布.有时就会遇到在New Server对话框中选择了Tomcat 6/7后却无法单击“Next”按钮的问题,如下图所示: ...

  8. java传统web项目添加maven管理jar包,log4j无法正常输出日志

    本文适合1年以上编程基础的开发人员阅读,非技术创新,可作为故障排除实录参考/收藏. 背景 笔者最近在给公司一个老的web项目改造升级,项目使用springmvc+mybatis,由于项目比较久远,没有 ...

  9. opencv 3.2图像矩(Image Moments)

    图像矩乍看比较难理解,看了很多资料,大概明白了一些,但还是无法在脑海里形成一个模型概念,于是从源码中寻找它的应用. 今天就通过公式和程序抓取数据,来进一步理解图像矩 先看一个图片 这是程序运行结果, ...

  10. docker从私有镜像库pull/push镜像问题:Error response from daemon: Get https://xxxx.com/: x509: certificate signed by unknown authority

    docker从私有镜像库pull/push镜像问题:Error response from daemon: Get https://harbor.op.xxxx.com/v2/: x509: cert ...