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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Mysql性能优化二:索引优化

    Mysql性能优化二:索引优化

    2021年11月7日
    50
  • python进阶(7)垃圾回收机制

    python进阶(7)垃圾回收机制前言现在的高级语言如java,c#等,都采用了垃圾回收机制,而不再像c,c++里,需要用户自己管理内存。自己管理内存及其自由,可以任意申请内存,但这如同一把双刃剑,可能会造成内存泄漏,空指针等bug

    2022年7月28日
    6
  • 数据库系统课程设计(高校成绩管理数据库系统的设计与实现)

    数据库系统课程设计(高校成绩管理数据库系统的设计与实现)数据库课程设计

    2022年7月16日
    20
  • js原生判断是否是数字类型[通俗易懂]

    js原生判断是否是数字类型[通俗易懂]js判断数字类型汇总最近在写代码的时候,有些逻辑需要判断数字类型,等用到的时候才发现自己了解的方法不太严密,然后就决心查资料汇总了解下有哪些方法比较严密第一种:typeof+isNaN使用typeof可以判断是否是一个数字类型,但是NaN也是数字类型,为了筛除这个可能,进一步通过isNaN来筛除。这种方法会遗漏InfinityfunctionisNumber(num){ retu…

    2022年6月28日
    24
  • DeepFakes深度造假,AI换脸的技术原理是什么?

    DeepFakes深度造假,AI换脸的技术原理是什么?DeepFakes的出现还意味着我们可以在视频中进行大规模的“换脸”。我们大多数人都曾经把自己的照片上传到网络上,因此,我们大多数人的脸都能够轻易地被替换到一些视频中,成为视频的“主角”,凭空捏造一个人根本没有干过的事。不得不说,这是件非常可怕的事情。

    2022年5月25日
    46
  • AutoEventWireup=“true” 属性

    AutoEventWireup=“true” 属性AutoEventWireupAutoEventWireup=“true” :自动事件匹配asp.net(AutoEventWireup属性的确切含义)使用Asp.NET时,新建的aspx页面第一行page指令中包含了一个AutoEventWireup属性。网上的很多教程认为这一属性,甚至这一行代码都是没用的。其实,这是不了解Asp.NET事件处理模型的表现。简单

    2022年5月28日
    30

发表回复

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

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