python基础菜鸟教程_菜鸟课程好还是文都好

python基础菜鸟教程_菜鸟课程好还是文都好Python菜鸟教程第二十课之初始Django1.Django简介Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,视图V和模版T。Django的主要目的是简便、快速的开发数据库驱动的网站。它强调代码复用,多个组件可以很方便的以“插件”形式服务于整个框架,Django有许多功能强大的第三方插件你甚至可以很方便的开发出自己的工具包。这使得Djan…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

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 HttpResponse


def 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,欢迎批评指正!!!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/196050.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux系统tcpdump指令抓包存为文件_tcpdump指定端口抓包

    linux系统tcpdump指令抓包存为文件_tcpdump指定端口抓包例:tcpdumphost172.16.29.40andport4600-X-s500tcpdupmhost172.16.29.40andport4600-X-s500-l-nn|teeldata.txt//可以将数据保存下来tcpdump采用命令行方式,它的命令格式为:tcpdump[-adeflnNOpqStvx][-c数量][-F…

    2022年8月20日
    7
  • qq刷屏代码可复制_QQ小程序「神奇字体」从注册到发布

    qq刷屏代码可复制_QQ小程序「神奇字体」从注册到发布QQ小程序最开始是邀请制的,在上个月差不多快中旬的时候对开发者全面开放了,把之前的微信小程序「神奇字体」搬了过去,关于微信小程序详见小程序神奇字体的从零到一。这里分享下QQ小程序从零到一的搬移过程。认证首先是去注册QQ小程序,进行认证开发者,然后才能发布小程序,大概认证了快一周左右吧。开发工具和微信小程序一样,先下了客户端。再看下微信小程序的开发界面。有没有发现不同之处。本来下完QQ…

    2022年6月10日
    181
  • 常用加密方式

    常用加密方式<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8&quo

    2022年7月3日
    22
  • mysql中多表嵌套查询例子_mysql子查询嵌套规则

    mysql中多表嵌套查询例子_mysql子查询嵌套规则本文实例分析了MySQL嵌套查询。分享给大家供大家参考,具体如下:MySQl从4.11版后已经完全支持嵌套查询了,那么下面举些简单的嵌套查询的例子吧(源程序来自MySQLUserManual):1.SELECT语句的子查询语法:代码如下:SELECT…FROM(subquery)ASname…先创建一个表:CREATETABLEt1(s1INT,s2CHAR(…

    2022年10月21日
    3
  • 赵青-《剑侠情缘网络版》开发回顾

    赵青-《剑侠情缘网络版》开发回顾赵青-《剑侠情缘网络版》开发回顾 赵青-《剑侠情缘网络版》开发回顾,(转自剑网1,作者应该是原剑网3技术总监)这篇文章首发于一本谈游戏研发的杂志,是赵青写的,写得非常不错。《剑侠情缘网络版》开发回顾2003年的1月,我刚刚开发完《天王》项目,正在休息、总结和规划下一个项目。《天王》是我开发的众多项目中最满意的一个,虽然这篇文字主要是对《剑侠…

    2022年7月19日
    13
  • 触摸事件 touchstart、touchmove、touchend

    触摸事件 touchstart、touchmove、touchend目录触摸事件触摸事件编码触摸手指个数分析触摸目标DOM元素分析触摸位置分析触摸事件HTML5中,PC端基于鼠标的界面互动主要是单击,移动端界面交互方式主要是触摸。移动端浏览器触摸事件事件名称 描述 是否包含touches数组 touchstart 触摸开始,多点触控,后面的手指同样会触发 是 touchmove …

    2022年6月19日
    38

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号