用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. eShopOnContainers 知多少[2]:Run起来

    环境准备 Win10(开启Hyper-V) .NET Core SDK Docker for Windows VS2017 or VS Code Git SQL Server Management S ...

  2. 注解ConfigurationProperties注入yml配置文件中的数据

    在使用SpringBoot开发中需要将一些配置参数放在yml文件中定义,再通过Java类来引入这些配置参数 SpringBoot提供了一些注解来实现这个功能 ConfigurationProperti ...

  3. SUSE12SP3-Mycat(4)rule.xml配置详解

    简介 rule.xml 里面就定义了我们对表进行拆分所涉及到的规则定义.我们可以灵活的对表使用不同的分片算法, 或者对表使用相同的算法但具体的参数不同.这个文件里面主要有 tableRule 和 fu ...

  4. kubernetes中的Pause容器如何理解?

    前几篇文章都是讲的Kubernetes集群和相关组件的部署,但是部署只是入门的第一步,得理解其中的一些知识才行.今天给大家分享下Kubernets的pause容器的作用. Pause容器 全称infr ...

  5. nmon - 性能监控利器介绍

    关于nmon nmon 是一款小巧的系统监控程序(只有5000行代码),可以用来对CPU.磁盘.内存等资源指标来做实时监控. 之前在做系统性能优化工作时用得较多,觉得非常不错,于是在这里给大家介绍下用 ...

  6. JDK源码分析(11)之 BlockingQueue 相关

    本文将主要结合源码对 JDK 中的阻塞队列进行分析,并比较其各自的特点: 一.BlockingQueue 概述 说到阻塞队列想到的第一个应用场景可能就是生产者消费者模式了,如图所示: 根据上图所示,明 ...

  7. 你所忽略的DNS---DNS实战及深度解读

    很多人没有dns的概念,或者仅仅知道dns负责解析从域名到ip地址,这对普通人来说,也许是够的,但对于开发者来说,就远远不够了. 很多中高级开发者的眼中的DNS是这样的(以百度为例): 读取hosts ...

  8. Vue + WebApi 小项目:构造自己的在线 Markdown 笔记本应用

    Vue + WebApi 小项目:构造自己的在线 Markdown 笔记本应用 目录 概要 知识点 完整示例图 代码与资源文件 流程步骤 概要 基于 MVP 最小可行性产品设计理念,我们先完成一个可以 ...

  9. Java开发笔记(八十五)通过字符流读写文件

    前面介绍了文件的信息获取.管理操作,以及目录下的文件遍历,那么文件内部数据又是怎样读写的呢?这正是本文所要阐述的内容.File工具固然强大,但它并不能直接读写文件,而要借助于其它工具方能开展读写操作. ...

  10. 三位数流水码的生成(000·····009··00A····00Z····ZZZ)

    //规格代码的生成 private String getCode (String code) { char[] chars=code.toCharArray(); if (chars[2]==57){ ...