用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)--视图函数的更多相关文章

  1. Django学习笔记之视图高级-CSV文件生成

    生成CSV文件 有时候我们做的网站,需要将一些数据,生成有一个CSV文件给浏览器,并且是作为附件的形式下载下来.以下将讲解如何生成CSV文件. 生成小的CSV文件 这里将用一个生成小的CSV文件为例. ...

  2. Django学习笔记之视图高级-HTTP请求与响应

    Django限制请求method 常用的请求method GET请求 GET请求一般用来向服务器索取数据,但不会向服务器提交数据,不会对服务器的状态进行更改.比如向服务器获取某篇文章的详情. POST ...

  3. Django学习之 - 基础视图函数

    视图:Views 获取用户请求的方法: 1: request.GET 2: request.POST 3: request.FILES # checkbox 等多选文件 4:request.POST. ...

  4. Django学习笔记之视图高级-类视图

    类视图 在写视图的时候,Django除了使用函数作为视图,也可以使用类作为视图.使用类视图可以使用类的一些特性,比如继承等. View django.views.generic.base.View是主 ...

  5. Django学习笔记之视图高级-错误处理

    错误处理 在一些网站开发中.经常会需要捕获一些错误,然后将这些错误返回比较优美的界面,或者是将这个错误的请求做一些日志保存.那么我们本节就来讲讲如何实现. 常见的错误码 404:服务器没有指定的url ...

  6. Django:学习笔记(9)——视图

    Django:学习笔记(9)——视图 基础视图 基于函数的视图,我们需要在使用条件语句来判断请求类型,并分支处理.但是在基于类的视图中,我们可以在类中定义不同请求类型的方法来处理相对应的请求. 基于函 ...

  7. Django:学习笔记(8)——视图

    Django:学习笔记(8)——视图

  8. Django 学习笔记(二)

    Django 第一个 Hello World 项目 经过上一篇的安装,我们已经拥有了Django 框架 1.选择项目默认存放的地址 默认地址是C:\Users\Lee,也就是进入cmd控制台的地址,创 ...

  9. Django学习笔记(9)—— 开发用户注册与登录系统

    一,项目题目: 开发用户注册与登录系统 该项目主要练习使用Django开发一个用户注册与登录的系统,通过这个项目然后巩固自己这段时间所学习的Django知识. 二,项目需求: 开发一个简单的用户登录与 ...

  10. Django学习笔记---第一天

    Django学习笔记 1.Django的安装 //如果不指定版本号,默认安装最新版 pip3 install django==1.11.8 关于Django的版本和python的版本依赖关系,请看下图 ...

随机推荐

  1. 处理安卓和ios当页面原生键盘弹出,输入框不显示

    $('input').on('click', function () { var target = this; // 使用定时器是为了让输入框上滑时更加自然 setTimeout(function() ...

  2. 史上最全的springboot导出pdf文件

    最近项目有一个导出报表文件的需求,我脑中闪过第一念头就是导出pdf(产品经理没有硬性规定导出excel还是pdf文件),于是赶紧上网查看相关的资料,直到踩了无数的坑把功能做出来了才知道其实导出exce ...

  3. 【死磕 Spring】----- IOC 之 加载 Bean

    原文出自:http://cmsblogs.com 先看一段熟悉的代码: ClassPathResource resource = new ClassPathResource("bean.xm ...

  4. 使用 docker-compose 快速安装Jenkins

    本文分享在 docker 环境中,使用 docker-compose.yml 快速安装 Jenkins,以及使用主机中的 docker 打包推送镜像到阿里云 博客园的第100篇文章达成,2019的第一 ...

  5. AI - TensorFlow - 第一个神经网络(First Neural Network)

    Hello world # coding=utf-8 import tensorflow as tf import os os.environ[' try: tf.contrib.eager.enab ...

  6. 2019-中小型公司PHP面试题目记录(附带答案)

    博主是三线省会城市的苦逼技术开发,主攻PHP方向,平时前后端语言也都有涉及,因为都是自学,上手就是框架,工作五年来基础补的不稳,换工作的时候苦不堪言,感觉一上来就问Ngnix的运行机制,php的被编译 ...

  7. 『集群』007 如何测试Slithice源代码

    如何测试Slithice源代码 直接测试 >你可以直接 进入 “集合编译区”,这里面 已经有 编译好的 所有程序集: >部署 配置数据库: >附加 集合编译区 中的 SQLServe ...

  8. jenkins定位GitLab推送的最新Webhook中push event来自哪一个分支

    转载请标明出处:http://www.cnblogs.com/zblade/ 一.调研目的 jenkins可以和GitLab搭档,每当GitLab上有commit的时候,都可以触发jenkins执行相 ...

  9. Docker在Linux上运行NetCore系列(三)在Linux上使用Docker运行Asp.NetCore

    转发请注明此文章作者与路径,请尊重原著,违者必究. 系列文章:https://www.cnblogs.com/alunchen/p/10121379.html 开始说明 上几篇文章都是通过Linux运 ...

  10. C#之使类型参数--泛型

    1.泛型是什么 泛型的就是“通用类型”,它可以代替任何的数据类型,使类型参数化,从而达到只实现一个方法就可以操作多种数据类型的目的. 2.为什么使用泛型 举一个比较两个数大小的例子: 以上例子实现in ...