Django框架学习(3)

目录

一.请求与响应

1.请求

2.响应

二.GET 和POST

1.GET

2.POST

三. django的设计模式和模板层

  1.mvc和mtv  

  2. 模板层 

   3.模板层变量

 四.URL反向解析

  1.url出现位置

  2.url书写规范

   3.url反向解析


一.请求与响应

  请求是指浏览器端通过HTTP协议发送给服务器端的数据

  响应是指服务器端收到请求后做出响应的处理再返回给浏览器端的数据

1.请求

  包含三部分:起始行,headers,body

三种最常用的请求

GET:请求指定的页面信息,并返回实体主体

HEAD:类似与GET只不过返回响应中无具体内容,用于获取报头

POST:向指定资源提交数据进行处理请求(例如提交表单或上传文件),数据包含在请求体中,  POST请求可能会导致新的资源建立或已有资源修改

  在Django中实则就是视图中的第一个参数,即HttpResponse对象

  Django在收到http协议之后,会根据数据报文创建HttpResponse对象

  HttpResponse对象通过属性描述了请求的所有相关信息

  path_info :url字符串

  method:字符串,表示HTTP请求方法

  GET:QueryDick查询字典的对象,包含GET请求的所有数据

  POST:QueryDick查询字典的对象,包含POST请求的所有数据

  FLILES:类似与字典的对象,包含上传的所有文件信息

  COOKIES:python字典,包含所有的cookies,键值都为字符串

   session:类似于字典,表示当前会话

   body:字符串,请求体的具体内容

   scheme:请求协议

   request.MATE:请求中的元数据(消息头)

   request.META['REMOTE_ADDR']:客户端地址

2.响应

 包含三部分:起始行,headers,body

  响应状态码

分类分类描述
1**信息,服务器收到请求,需要请求者继续操作
2**成功,操作成功接受并受到处理,200(成功)
3**重定向,需要进一步操作,301(永久重定向),302(临时)
4**客户端错误,包含语法错误,或无法完成请求,404(网页不存在)
5**服务器错误,服务器在处理请求时发生错误,500(内部服务器出错)

  Django中的响应对象:

  构造函数格式:HttpResponse(content=响应体,content _type:响应体数据类型,status:状态码) 

  作用:向客户端返回响应,并携带相应响应体的内容

  content_type 类型

-'text/html'(默认的,html文件)
-'text/plain'(纯文本)
-'text/css'(css文件)
-'text/javascript'(js文件)
-'multipart/form-data'(文件提交)
-'application/json'(json传输)
-'application/xml' (xml文件) 

HttpResponse子类 

类型状态码
HttpResponseRedirect 302
HttpResponseNotModified304
HttpResponseBadRequest400
HttpResponseNotFound404
HttpResponseForbidden403
HttpResponseServerError 500 

 在使用HttpResponse子类时,需要import对应子类 


二.GET 和POST

  无论是GET还是POST,同意由视图函数接受请求,通过判断request .method来区分具体请求动作

1.GET

  GET请求一般用于向服务器获取数据

  产生GET请求的场景: 

  • 浏览器输入URL回车后
  • <a href="地址?参数=值">
  • from表单中method为get   

   在GET中如果有数据传递给服务器,通常用QueryString,注意不要传递敏感信息

  GET方法

 request.GET['参数名']  //当没有这个参数时,会直接报错

request.GET.get['参数名','默认值']   //当没有这个参数时,会按默认值处理

request.GET.getlist['参数名']    //,当一个参数对应多个值时,返回一个列表

2.POST

  一般用于向服务器发送隐私/大量数据 如博客,密码等

  POST方法 

request.POST['参数名']

request.POST.get['参数名','默认值']

request.POST.getlist['参数名']    

  Django自带csrf验证,当前没有掌握,所有直接在settings.py文件中将其注释掉即可 


三. django的设计模式和模板层

  1.mvc和mtv  

MVC 代表 Model-View-Controller(模型-视图-控制器)模式。

M模型层(Model),主要用于对数据库层的封装
V视图层(View)用于向用户展示结果(WHAT+HQW)
C 控制(Controller,用于处理请求、获取数据、返回结果(重要)

作用:降低模块间的耦合度(解耦)

MTV 代表 Model-Template-View(模型-模板-视图) 模式。
M 模型层(Model) 负责与数据库交互
T模板层(Template)负责呈现内容到浏览器(HOW)
V视图层(View)是核心,负责接收请求、获取数据、返回结果(WHAT)

作用:降低模块间的耦合度(解耦)

  2. 模板层 

   模板是可以根据视图层传入字典动态变化的HTML网页

    a.创建模板文件夹<项目名>/templates
      在settings.py中 TEMPLATES 配置项
      1. BACKEND:指定模板的引擎
      2. DIRS:模板的搜索目录(可以是一个或多个)
      3. APP_DIRS:是否要在应用中的templates文件夹中搜索模板文件
      4. OPTIONS:有关模板的选项


      目前配置项中需要修改部分
      设置DIRS -'DIRS': [os.path.join(BASE_DIR,'templates')].

       若无引入os需要import os

b.模板的加载方式

from django.shortcuts import render

return render(request,'模板名称' ,字典数据)

c.模板层和视图层的交互

  视图函数可以将python变量装到字典中传到模板层中

def index(request):
    dic={
        'username':'zzys'
    }
    return render(request,'模板层文件',dic)
//dic可用local()方法传入所有参数

    模板层语法

<div> myname is {{ username }}</div>

   3.模板层变量

    a.能够传到模板层中的数据类型

       str,int,dic,func,obj,list,tuple

     b.在模板中使用变量语法

       {{变量名}},{{变量名.index}},{{变量名.key}},{{对象 .方法}},{{函数名}}

     c.模板标签

        可以将服务端的一些流程控制嵌入到模板层中

       标签语法  {% 标签 %}

                        {% 结束标签 %}

  if标签

{% if条件表达式 %}

{% elif 条件表达式 %}

{% else %}

{% endif %}

for标签

{% for 变量 in 可迭代对象 %}
    可迭代语句
{% empty %}
    可迭代对象无数据时执行的语句
{% endfor %}

  django对于内置标签的介绍


 四.URL反向解析

  1.url出现位置

<a href="url"></a>
<from action="url"> </from>
//视图函数中302跳转
return HttpResponse('url')

  2.url书写规范

   a.绝对地址

http://127.0.0.1:8000/page/1

  b.相对地址

“/page/1”
//以'/'开头的相对路径,浏览器会将协议,ip,端口和当前url组合访问
“page/1”
//没有'/'开头,浏览器会识别当前地址栏的URL最后一个/然后再加上此URL

   3.url反向解析

   url反向解析是指在视图或模板中,用path的第三个参数 name来进行动态查找或计算出当前URL

   注意:name是唯一的,不能重复

    a.url在模板中的使用

{% url 'name' '参数1' '参数2' %} //若此url含有转换器,可直接传参数

    b.url在视图中的使用

from django.urls import reverse

reverse('别名',args=[],kwargs=[])

例如:

print(reverse('page',args=[1000]))
print(reverse('page',kwargs=['name'='zzys',age='10']))
Django框架概述Django 是用 Python 开发的一个免费开源的 Web 框架,提供了许多网站后台开发经常用到的模块,使开发者能够专注于业务部分。并且囊括的 Web 应用部分可以用于快速搭建高性能、优雅的网站。并且提供了通用 Web 开发模式的高度抽象,通过 DRY(Don't Repeat Yourself,不要重复自己)的理念为频繁进行的编程作业提供了快速解决方法。Django的特点1.自带管理后台 简单的几行代码就可以让目标网站拥有一个强大的管理后台,轻松对内容进行增加、删除、修改与查找操作,以及很方便地定制搜索、过滤等操作,因此特别适合用于内容管理平台。 2.灵活的路由系统 定义优雅的访问地址,还可伴随项目进行配置。 3.强大的数据库 ORM 强大的数据库操作接口(QuerySet API)可以轻松执行原生 SQL。 4.易用的模板系统 基于前后端分离系统可用 Django 开发 API,不使用模板系统,并也可以轻易替换成其他模板。 5.缓存系统 与 Memcached,Redis 等缓存系统联合使用,获得更快的加载速度,并且配置简单。 6.国际化支持 支持多语言应用,允许定义翻译的文字,轻松翻译成不同国家/地区的语言。 Django 发布情况功能版本(A.B,A.B+1,如 2.0,2.1 等)大约每 8 个月发布一次。这些版本将包含新功能以及对现有功能的改进等,也可能包含与上一个版本不兼容的功能,详细的说明在版本的发布日志(Release Notes)中可以查阅到。补丁版本(A.B.C,如 2.1.3)会根据需要发布,以修复错误和安全问题。这些版本将与相关的功能版本 100% 兼容,除非是出于安全原因或为了防止数据丢失而无法做到 100% 兼容。正因为如此,如果之前使用的是 Django 3.0,现在最新的版本是 Django 3.0.3,那么可以放心将 3.0 版本升级到 3.0.3版本。某些功能版本被指定为长期支持(LTS)版本,这种稳定版本通常自发布之日起 3 年以内,会持续发布安全和关键补丁,即所谓提供持续稳定的支持。从 Django 2.0 开始,它不再支持 Python 2。下图演示了 Django 各版本的发布情况和支持计划 Django 的 MVT 架构简介Django 是一个 Python Web 框架,和大多数框架一样支持 MVC模式。通过学习 MVC(Model-View-Controller)模式,了解 Django MVT(Model-View-Template)的不同之处。1.MVC 模式 MVC 是开发 Web 应用程序的一种软件设计模式,其中各部分功能如下: 模型(Model):位于模式底层,负责管理应用程序的数据。它处理来自视图的请求,并且响应来自控制器的指令以更新自身。 视图(View):负责向用户以特定格式呈现全部或部分数据。 控制器(Controller):控制模型和视图之间交互的代码。MVT 模式 MVT 与 MVC 区别在于 Django 本身已经实现了控制器(Controller)这部分的功能,暴露给开发者的是模板(Template)。所以可以简单认为 Django 中的模板是 HTML 文件,但其支持 Django 的模板语言。这种模板语言简单来说就是通过占位符、循环、逻辑判断等来控制页面上的内容展示。 Django 和其他 Python Web 框架的对比用于 Python Web 开发的框架有很多,比如 Flask、Bottle、Pyramid、Webpy 等。1. Django 和 Flask 的对比 Flask 是小而精的微框架(Micro Framework),它不像 Django 那样大而全。如果使用 Flask 开发,开发者需要自己决定使用哪个数据库 ORM、模板系统、用户认证系统等,需要自己去组装这些系统。与 Django 开发相比,开发者在项目开始的时候可能需要花更多的时间去了解、挑选各个组件,正因为这样,Flask 开发的灵活度更高,开发者可以根据自己的需要去选择合适的插件。由于是自己一步步地将整个系统组装起来的,因此也比较容易了解各个组件部分。当然,Flask 历史相对更短,第三方 App 自然没有 Django 那么全面。2. Django 和 Tornado 的对比 Tornado 是一个 Python Web 框架和异步网络库,最初由 FriendFeed 开发,当初设计它的目的是为了解决 10000 个并发连接(C10K 问题)。传统的 Apache 服务器会为每个 HTTP 请求连接一个线程,而在大多数 Linux 发行版中默认线程堆(Heap)大小是 8MB,当连接数量过多时,这种线程池的方式极易耗光服务器上的所有资源。Tornado 会把等待资源的操作挂起,当数据准备好时,再回调相应的函数。通过使用非阻塞网络 I/O,Tornado 可以轻松应对数万个连接。因而 Tornado 也就成为长轮询,是 WebSocket 和其他需要与每个用户建立长期连接的应用程序的理想选择。和 Django 相比,使用 Tornado 编写异步代码对于开发者来说,没有 Django 或 Flask 编写同步代码那么简单、直接和高效。使用 Python 进行 Web 开发合适吗?Python 简单易学、上手快速,成为很多程序员喜爱的编程语言。使用 Python 进行 Web 应用开发,无疑能够加快需求实现的速度,快速迭代和验证产品的原型。有些人可能会有疑问:Python 性能不够好,用来开发 Web 是不是不太合适?Python 在性能上确实无法和 C语言、Java 等语言相比,但在大部分情况下使用 Python 开发是可以满足性能需求的,并且很多时候程序性能不够好,这不是语言本身的问题,而是架构设计、缓存设计、数据结构算法的选用以及开发人员编程水平等引起的问题。总之,使用 Python 语言进行 Web 开发有独特的优势,通常能满足大部分应用场景的需求。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zyzyss

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值