Python菜鸟教程第二十课之初始Django

1.Django简介

Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,视图V和模版T。Django的主要目的是简便、快速的开发数据库驱动的网站。它强调代码复用,多个组件可以很方便的以“插件”形式服务于整个框架,Django有许多功能强大的第三方插件你甚至可以很方便的开发出自己的工具包。这使得Django具有很强的可扩展性。它还强调快速开发和DRY(Do Not Repeat Yourself)原则。

2.新建Django项目。

下面带大家来新建一个Django中最最最最最最最简单的项目

首先第一步,先安装一下Django库。windows键+R打开搜索,输入cmd,进入到windows命令行页面,输入:

pip install Django

当看到提示suceessful后,表示下载成功。

第二步,在Pycharm中新建Django项目。

在Pycharm左上角的菜单栏中,依次点击:File–>new project–>Django。在Location那一栏中可以选择项目存放的位置。在Project Interpreter里则是设置该项目的Python环境,我这里是选择已经有了的环境。

[外链图片转存失败(img-OCCRADnf-1566784388950)(C:\Users\hasee\AppData\Roaming\Typora\typora-user-images\1565606417301.png)]

新建完成项目的目录列表如下:

[外链图片转存失败(img-8qfFGcvp-1566784388952)(C:\Users\hasee\AppData\Roaming\Typora\typora-user-images\1565606740585.png)]

第三步,新建好之后,就可以开始编写我们的代码啦!

右键untitled,新建一个Python文件,命名为:views。

在views中输入代码:

from django.http import HttpResponsedef index(request):return HttpResponse('欢迎来到jango的世界!')

在urls文件中找到urlpatterns的列表,在其中加入一句:

path('test/', index),

[外链图片转存失败(img-EWbJPj2R-1566784388952)(C:\Users\hasee\AppData\Roaming\Typora\typora-user-images\1565607145063.png)]

到目前为止,这最最最最最最简单的Django项目代码部分已经完成了!。

第四步,接下来就需要我们去运行该项目了。

在PyCharm右下角选中Terminal,进入控制台,输入如图所示的代码后回车。

[外链图片转存失败(img-5iisj6Ym-1566784388953)(C:\Users\hasee\AppData\Roaming\Typora\typora-user-images\1565607247660.png)]

python manage.py runserver#运行网页必须的代码,大家一定要记住!

如果大家一步一步按照上面的步骤来,会出现如下图所示的页面,说明大家的页面跟框架都已经搭建好了,点击蓝色的网址就可以了。

[外链图片转存失败(img-9Sd5xxRH-1566784388953)(C:\Users\hasee\AppData\Roaming\Typora\typora-user-images\1565607398805.png)]

点击进入网页后,我们会看到一个火箭图片,然后在网址后面输入test,回车就能看到新建的网页了。

[外链图片转存失败(img-eM9Tjmcq-1566784388954)(C:\Users\hasee\AppData\Roaming\Typora\typora-user-images\1565607639595.png)]

到此为止,简单到不能称之为项目的Django网页已经完成了!

3.urls简介

在Django中,要访问一个自己新建的项目,最简单的也是不可缺少的步骤有三:设置urls、编写视图函数、通过浏览器访问。url即路由信息往往存在于urls.py文件中的urlpatterns列表中。在最开始的时候,jango往往使用的url来设置路由,现在通常由path来设置。

现在来简单介绍一下urls的几种用法。

3.1不传参配置路由

urls.py

urls中通常使用正则。

urlpatterns=[url(r'^Hello/$', hello), #"Heoll"表示的是浏览器中输入的路径名(路由),而"hello"表示的则是该路径调用的视图函数。
]

views.py

#views.py中存放的是视图函数,在路由中可以设置访问其的视图函数。
def  hello(request):return   HttpResponse( "Hello World" )

有了以上的信息,我们就可以通过浏览器来访问 http://127.0.0.1:8000/Hello。

3.2传递一个参数配置路由

urls.py

urlpatterns=[url(r'^Hello/(.+)/$', hello),#通过正则指定一个参数
]

views.py

def   hello(request,param1):return  HttpResponse( "The param is : "   +   param1)

有了以上的信息,我们就可以通过浏览器来访问 http://127.0.0.1:8000/Hello/china。

3.3传递多个参数配置路由

urls.py

urlpatterns=[url(r'^Hello/p1(\w+)p2(.+)/$', hello),#参照第二种情况,URL中通过正则指定两个参数:
]

views.py

def   hello(request,param1,param2):return   HttpResponse(param1  +param2)

有了以上的信息,我们就可以通过浏览器来访问 http://127.0.0.1:8000/Hello/p1chinap22019/.

从这里可以看出,视图的参数是根据URL的正则式,按顺序匹配并自动赋值的。虽然这样可以实现任意多个参数的传递,但是却不够灵活,URL看起来很混乱,而且由于是正则匹配,有些情况下容易出错。

3.4传递多个参数配置路由的第二个方法

urls.py

urlpatterns=[url(r'^Hello/$'  , hello),
]

views.py

  def   hello(request,param1,param2):p1 =  request.GET.get(p1)p2  = request.GET.get(p2)return   HttpResponse( "p1 = "   +   p1  +   "; p2 = "   +   p2)

有了以上的信息,我们就可以通过浏览器来访问 http://127.0.0.1:8000/Hello/?p1=china&p2=2019.

url中‘?’之后表示传递的参数,这里传递了p1和p2两个参数。 通过这样的方式传递参数,就不会出现因为正则匹配错误而导致的问题了。在Django中,此类参数的解析是通过request.GET.get方法获取的。

4.views.py

视图函数是一个简单的Python 函数,它接受Web请求并且返回Web响应。响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . . 是任何东西都可以。无论视图本身包含什么逻辑,都要返回响应。这个视图函数代码一般约定是放置在项目或应用程序目录中的名为views.py的文件中。

http请求中产生两个核心对象:

1、http请求---->HttpRequest对象,用户请求相关的所有信息(对象)

2、http响应---->HttpResponse对象,响应字符串

视图函数中我们用到的request,就是HttpRequest对象。HttpResponse(),就是HttpResponse对象,它向http请求响应了一段字符串。

视图函数,就是围绕着HttpRequest和HttpResponse这两个对象进行的。

4.1HttpRequest对象

除非另有说明,否则所有属性都应视为只读(session除外)。

视图函数中的request参数与HttpRequest应该是有所区别的但是我暂时没办法给大家总结出来(有知道的小伙伴们可以在下面回复讨论!)。

我这里列出的只是request参数的属性。

属性名 描述
request.path 主要是用来获取访问文件路径
request.method 获取请求中使用的HTTP方式(POST/GET)
request.META 请求信息
request.GET 获取HTTP GET方式请求传参(字典类型)
request.POST 获取POST请求的数据(类字典对象) 请求体里拿值。
request.FILES 包含所有上传文件的类字典对象
request.GET.get( name ) 拿到GET请求里name的值,如果某个键对应有多个值,则不能直接用get取值,需要用getlist
request.user 是一个django.contrib.auth.models.User对象,代表当前登陆的用户

4.2HttpResponse响应对象

对于HttpRequest请求对象来说,是由django自动创建的,但是,HttpResponse响应对象就必须我们自己创建。每个view请求处理方法必须返回一个HttpResponse响应对象。

函数名 描述
content 表示返回的内容,字符串类型
charset 表示response采用的编码字符集,字符串类型
status_code 响应的HTTP响应状态码
content-type 指定输出的MIME类型

4.21子类

django.http包含许多HttpResponse subclasses,用于处理不同类型的HTTP responses。

常见子类:

HttpResponseRedirect 301
HttpResponsePermanentRedirect 302
HttpResponseNotModified 304
HttpResponseBadRequest 400
HttpResponseForbidden 403
HttpResponseNotFound 404
HttpResponseNotAllowed 405

子类的使用:

def login2(request):return HttpResponseNotFound(content="自定义响应")

4.3HttpResponseRedirect

HttpResponseRedirect:重定向一个url

使用方法: return HttpResponseRedirect( /路由名/ ) 注意是完整的路由不包括ip和端口

4.4render

render方法可接收三个参数,一是request参数,二是待渲染的html模板文件,三是保存具体数据的字典参数。render方法结合一个给定的模板和一个给定的上下文字典,并返回一个渲染后的HttpResponse对象。

def index(request):return render(request, template_name,context)

参数:
request: 用于生成响应的请求对象。
template_name:要使用的模板的完整名称,可选的参数
context:添加到模板上下文的一个字典。默认是一个空字典。如果字典中的某个值是可调用的,视图将在渲染模板之前调用它。

render方法主要是将从服务器提取的数据,填充到模板中,然后将渲染后的html静态文件返回给浏览器。这里一定要注意:render渲染的是模板。

4.5redirect

redirect的参数可以是:
一个模型:将调用模型的get_absolute_url() 函数
一个视图,可以带有参数:将使用urlresolvers.reverse 来反向解析名称
一个绝对的或相对的URL,将原封不动的作为重定向的位置。
默认返回一个临时的重定向;传递permanent=True 可以返回一个永久的重定向。

示例:

将调用具体ORM对象的get_absolute_url()方法来获取重定向的URL,

from django.shortcuts import redirect
def my_view(request):...object = MyModel.objects.get(...)return redirect(object) # object指的是视图函数

传递一个视图的名称,可以带有位置参数和关键字参数;将使用reverse() 方法反向解析URL:

def my_view(request):...return redirect(some-view-name, foo= bar )

传递要重定向的一个硬编码的URL:

def my_view(request):...return redirect( ‘/some/url/’ ) # 完整的url

也可以是一个完整的URL:

def my_view(request):...return redirect( ‘https://www.baidu.com/’ )

默认情况下,redirect() 返回一个临时重定向。以上所有的形式都接收一个permanent 参数;如果设置为True,将返回一个永久的重定向:

301永久重定向是一种非常重要的“自动转向”技术,是网址重定向最为可行的一种办法。当用户或搜索引擎向网站服务器发出浏览请求时,服务器返回的HTTP数据流中头信息(header)中的状态码的一种,表示本网页永久性转移到另一个地址。

ef my_view(request):...object = MyModel.objects.get(...)return redirect(object, permanent=True)  

4.3拓展延伸

首先谈谈浏览器处理HttpRequest请求的流程:

一开始的时候,我们在浏览器中输入http://127.0.0.1:8000/Hello/(即发送了请求),这时浏览器会把这个请求交给Django处理。随后Django在我们的urls.py文件根据路由名查找,决定调用哪一个视图函数。确定好之后,调用该视图函数,并返回一个响应给浏览器给浏览器。根据以上的步骤,我们可以想明白为什么将HttpRequest对象作为第一个参数传视图函数,而视图函数必须返回HttpResponse对象。可以参考下图:

博主QQ:1031748759,欢迎批评指正!!!

Python菜鸟教程第二十课之初识Django相关推荐

  1. Python界面编程第二十课:Pyside2 (Qt For Python)文本编辑框QTextEdit

    先看完整代码: from PySide2.QtWidgets import QApplication, QMainWindow, QAction, QTextEdit import sys from ...

  2. PS教程第二十课:有了选区就有了界限

  3. Python界面编程第二十一课:Pyside2 (Qt For Python)打印预览QTextEdit内容

    Pyside2 的QPrintSupport类中的QPrinter 和 QPrintPreviewDialog支持打印功能. 先看完整代码: from PySide2.QtWidgets import ...

  4. python 菜鸟-python菜鸟教程

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 除了常见的循环控制语句,python 中还有if,if else和if ...

  5. Python开发【第二篇】:初识Python

    Python开发[第二篇]:初识Python Python简介 Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为 ...

  6. python菜鸟教程官网pandas,python菜鸟教程官网numpy

    求比较好的Python练习网站 适合 Python 入门学习的5个网站1. Python官方网站最权威的 Python 教程.2. 菜鸟教程 Python 教程基本入门级教程,还有一些简单的进阶教程. ...

  7. 第二十课 Django Admin后台管理

    第二十课 Admin后台管理 1. admin创建用户 创建管理员账号: python manage.py createsuperuser# 按提示输入用户名.邮箱.密码 2. 注册模型 如果只是在a ...

  8. python基础教程第二版和第三版哪个好-python基础教程 2版和3版哪个适合新手?!...

    python基础教程 2版和3版哪个适合新手? 现在学是学python3. 两者的差异发者本身影响并不大,个别语法细微的差比如python3的print数方式使用,一些常用模块的名称差异,一些机制的差 ...

  9. Python学习笔记第二十九天(N维数组(ndarray))

    Python学习笔记第二十九天 N维数组(ndarray) 构建阵列 索引阵列 ndarray的内部内存布局 阵列属性 内存布局 数据类型 其他属性 阵列接口 ctypes外部功能接口 Array方法 ...

  10. Alex 的 Hadoop 菜鸟教程: 第5课 YARN 安装以及helloworld (基于centos的CDH)

    原帖地址:http://blog.csdn.net/nsrainbow/article/details/36627675 新老MapReduce的比较 说到YARN肯定要先说下老的MapReduce ...

最新文章

  1. ZwQueryVirtualMemory暴力枚举进程模块
  2. 《Objective-c》-(description方法)
  3. json-lib解决死循环
  4. 近期知识图谱顶会论文推荐,另附超详笔记解读
  5. android handler 的removeMessages的使用
  6. 爬虫 spider09——爬取指定数据,去重复,并存储到mysql
  7. Linux 下使用Java连接 mysql
  8. 13.相机和图像——缩放和移动是不一样的,移动变焦镜头,镜头并不完美,镜像系统_5
  9. Linux脚本验证的常见方法,linux shell常用循环与判断语句(for,while,until,if)使用方法...
  10. 设计PSD分层素材模板|几何元素平面广告,在设计风格中占有一席之地
  11. 认知觉醒是成长的首因,送3本硬核认知提升书
  12. 数据库篇之[bsp_orders]数据表-BrnShop1.9升级至2.1升级说明(非官方版本)
  13. ASIHTTPRequest框架进行文件下载
  14. Rabbit MQ 延迟插件rabbitmq_delayed_message_exchange的安装
  15. 【刷算法】对称的二叉树
  16. 【AIOT】手表调研
  17. 【数据库原理及应用】——基本表更新(INSERT、UPDATE、ALTER、DELETE)与视图VIEW(学习笔记)
  18. Unity | 动画那些事儿
  19. 【兄弟连】二、Linux系统安装
  20. 布朗大学数学与计算机科学,数学差的人不配学计算机?布朗大学教授告诉你一毛钱关系都没有...

热门文章

  1. 基础篇必看,史上最全的iOS开发教程集锦,没有之一
  2. 用苹果手机做c语言作业,c for ios好用吗,就是苹果手机上的一个C语言编程APP
  3. Calendar 设置周一为每周第一天
  4. POI合并单元格注意事项
  5. 第5章 软件质量标准概述
  6. 2022年全球市场光学软件总体规模、主要企业、主要地区、产品和应用细分研究报告
  7. 《5分钟商学院》--刘润老师直播
  8. 详解Java 堆排序
  9. ABB伺服驱动调试(四)
  10. 阿里云SLB负载均衡ESS弹性伸缩