Django学习笔记(2)--视图函数
用pycharm打开FDJ项目
URL分发器
视图:
视图一般都写在app的view,py中。并且视图的第一个参数永远都是request(一个HttpRequest)对象。这个对象存储了请求过来的所有信息,包括携带的参数以及一些头部信息等。在视图中,一般是完成逻辑相关的操作。比如这个请求使添加一篇博客,那么可以通过request来接收到这些数据,然后存储到数据库中,最后再把执行的结果返回给浏览器。视图函数的返回结果必须是httpResponse对象或者子类的对象。
实例:
创建book app:
(Django-env) python manage.py startapp book
在book app下的views.py中添加:
from django.http import HttpResponse
def book_list(request):
return HttpResponse("书籍列表:")
URL映射:
回到FDJ目录下的urls.py中:
from book import views
urlpatterns = [
path('admin/', admin.site.urls),
path('book/', views.book),
]
打开浏览器输入http://127.0.0.1:8000/book/

补充:
视图函数的返回的对象必须为:

URL添加参数:
有时候,url中包含了一些参数需要动态调整。比如简书某篇文章的详情页的url,是https://www.jianshu.com/p/a5aab9c4978e后面的a5aab9c4978e就是这篇文章的id,那么简述的文章详情页面的url就可以写成https://www.jianshu.com/p/<id>,其中id就是文章的id,那么如何在django中实现这种需求呢。这时候我们就可以在path函数中,使用尖括号的形式来定义一个参数。比如我现在想要获取一本书籍的详细信息,那么应该在url中指定这个参数。示例代码如下:
在views.py中添加
def book_detil(request,book_id):
#在数据库中根据id提取图书信息
text = book_id
return HttpResponse(text)
在urls.py中的urlpatterns中添加
path('book/detil/<book_id>/',views.book_detil),
然后在浏览器网址栏输入http://127.0.0.1:8000/book/1234
当然可以加更多参数,比如
path('book/detil/<book_id>/<categrary>',views.book_detil),
那么views.py中的book_detil必须改成:
def book_detil(request,book_id,categrary):
#在数据库中根据id提取图书信息
text = book_id
#categrary....categrart的操作。。。
return HttpResponse(text)
另一种url传参数的方式是字符串匹配:
在urls.py中的urlpatterns中添加
path('book/author',views.author_detil),
在views.py中添加
def author_detil(request):
author_id = request.GET.get('id')
text= author_id
return HttpResponse(text)
在浏览器网址栏输入http://127.0.0.1:8000/book/author/?id=111
总结:
1.url映射:
- 为什么会去urls.py文件中寻找映射呢?在'urls.py'中我们所有的映射,都应该放在‘urlpatterns’这个变量这个变量中。
- 是因为在'settings.py'文件中配置了‘ROOT_URLCONF’为'urls.py'。所有django会去'urls.py'中寻找。
- 所有的映射不是随便写的。而是使用'path'的第一个参数中,使用'<参数名>'
2.url传参数:
- 采用在url中使用变量的方式:在path的第一个参数中,使用'<参数名>'的方式可以传递参数。然后在视图函数中也要写一个参数,视图函数中的参数必须和url中的参数名称保持一致,不然就找不到这个参数,另外,url中可以传毒多个参数。
- 采用查询字符串的方式:在url中不需要单独的匹配查询字符串的部分。只需要在视图函数中使用'request.GET.get(参数名称)'的方式来获取。因为查询字符串使用的是'GET'请求,所以我们通过'request.GET'来获取参数。并且因为'GET'是一个类似于字典的数据类型,所有获取取值字典的方式都是一样的。
补充:
URL命名与反URL
1.为什么需要url命名?
- 因为url是经常变换的,如果在代码中写死了可能会经常改代码,给url去个名字,以后使用url的时候就是用他的名字进行反转就可以了,就不需要写死url了。
2.如何给一个url指定名称?
- 在'path'函数中,传递一个'name'参数就可以指定。示例:
urlpatterns = [
path('',views.index,name='index'),
]
应用命名空间:
- 在多个app之间,有可能产生同名的url,这时候为了避免反转rul的时候传声混淆,可以使用命名空间,来做区分,定义应用命名空间非常简单,只需要在'app'的'urls.py'中定义一个叫做'app_name'的变量,来指定这个应用的命名空间即可。示例:
#应用命名空间
app_name = 'front' urlpatterns = [
path('',views.index,name='index')
]
以后在做反转的时候就可以使用'应用命名空间url名称'的方式进行反转,示例:
login_url = reverse('front:index')
Django学习笔记(2)--视图函数的更多相关文章
- Django学习笔记之视图高级-CSV文件生成
生成CSV文件 有时候我们做的网站,需要将一些数据,生成有一个CSV文件给浏览器,并且是作为附件的形式下载下来.以下将讲解如何生成CSV文件. 生成小的CSV文件 这里将用一个生成小的CSV文件为例. ...
- Django学习笔记之视图高级-HTTP请求与响应
Django限制请求method 常用的请求method GET请求 GET请求一般用来向服务器索取数据,但不会向服务器提交数据,不会对服务器的状态进行更改.比如向服务器获取某篇文章的详情. POST ...
- Django学习之 - 基础视图函数
视图:Views 获取用户请求的方法: 1: request.GET 2: request.POST 3: request.FILES # checkbox 等多选文件 4:request.POST. ...
- Django学习笔记之视图高级-类视图
类视图 在写视图的时候,Django除了使用函数作为视图,也可以使用类作为视图.使用类视图可以使用类的一些特性,比如继承等. View django.views.generic.base.View是主 ...
- Django学习笔记之视图高级-错误处理
错误处理 在一些网站开发中.经常会需要捕获一些错误,然后将这些错误返回比较优美的界面,或者是将这个错误的请求做一些日志保存.那么我们本节就来讲讲如何实现. 常见的错误码 404:服务器没有指定的url ...
- Django:学习笔记(9)——视图
Django:学习笔记(9)——视图 基础视图 基于函数的视图,我们需要在使用条件语句来判断请求类型,并分支处理.但是在基于类的视图中,我们可以在类中定义不同请求类型的方法来处理相对应的请求. 基于函 ...
- Django:学习笔记(8)——视图
Django:学习笔记(8)——视图
- Django 学习笔记(二)
Django 第一个 Hello World 项目 经过上一篇的安装,我们已经拥有了Django 框架 1.选择项目默认存放的地址 默认地址是C:\Users\Lee,也就是进入cmd控制台的地址,创 ...
- Django学习笔记(9)—— 开发用户注册与登录系统
一,项目题目: 开发用户注册与登录系统 该项目主要练习使用Django开发一个用户注册与登录的系统,通过这个项目然后巩固自己这段时间所学习的Django知识. 二,项目需求: 开发一个简单的用户登录与 ...
- Django学习笔记---第一天
Django学习笔记 1.Django的安装 //如果不指定版本号,默认安装最新版 pip3 install django==1.11.8 关于Django的版本和python的版本依赖关系,请看下图 ...
随机推荐
- 处理安卓和ios当页面原生键盘弹出,输入框不显示
$('input').on('click', function () { var target = this; // 使用定时器是为了让输入框上滑时更加自然 setTimeout(function() ...
- 史上最全的springboot导出pdf文件
最近项目有一个导出报表文件的需求,我脑中闪过第一念头就是导出pdf(产品经理没有硬性规定导出excel还是pdf文件),于是赶紧上网查看相关的资料,直到踩了无数的坑把功能做出来了才知道其实导出exce ...
- 【死磕 Spring】----- IOC 之 加载 Bean
原文出自:http://cmsblogs.com 先看一段熟悉的代码: ClassPathResource resource = new ClassPathResource("bean.xm ...
- 使用 docker-compose 快速安装Jenkins
本文分享在 docker 环境中,使用 docker-compose.yml 快速安装 Jenkins,以及使用主机中的 docker 打包推送镜像到阿里云 博客园的第100篇文章达成,2019的第一 ...
- AI - TensorFlow - 第一个神经网络(First Neural Network)
Hello world # coding=utf-8 import tensorflow as tf import os os.environ[' try: tf.contrib.eager.enab ...
- 2019-中小型公司PHP面试题目记录(附带答案)
博主是三线省会城市的苦逼技术开发,主攻PHP方向,平时前后端语言也都有涉及,因为都是自学,上手就是框架,工作五年来基础补的不稳,换工作的时候苦不堪言,感觉一上来就问Ngnix的运行机制,php的被编译 ...
- 『集群』007 如何测试Slithice源代码
如何测试Slithice源代码 直接测试 >你可以直接 进入 “集合编译区”,这里面 已经有 编译好的 所有程序集: >部署 配置数据库: >附加 集合编译区 中的 SQLServe ...
- jenkins定位GitLab推送的最新Webhook中push event来自哪一个分支
转载请标明出处:http://www.cnblogs.com/zblade/ 一.调研目的 jenkins可以和GitLab搭档,每当GitLab上有commit的时候,都可以触发jenkins执行相 ...
- Docker在Linux上运行NetCore系列(三)在Linux上使用Docker运行Asp.NetCore
转发请注明此文章作者与路径,请尊重原著,违者必究. 系列文章:https://www.cnblogs.com/alunchen/p/10121379.html 开始说明 上几篇文章都是通过Linux运 ...
- C#之使类型参数--泛型
1.泛型是什么 泛型的就是“通用类型”,它可以代替任何的数据类型,使类型参数化,从而达到只实现一个方法就可以操作多种数据类型的目的. 2.为什么使用泛型 举一个比较两个数大小的例子: 以上例子实现in ...