虚拟环境

每创建一个虚拟环境类似于重新下载了一个纯净的python解释器

但虚拟环境不要创建太多,会占用电脑硬盘空间

项目1需要使用:django1.11 								 python38
项目2需要使用:django2.22 pymysql requests python38
项目3需要使用:django3.22 request_html flask urllib3 python38 实际开发项目中我们只会给项目配备所需的环境,不需要的一概不配!!! 虚拟环境:能够针对相同版本的解释器创建多个分身 每个分身可以有自己独立的环境 在CMD终端创建虚拟环境: python -m venv pyvenv38

视图层views

三板斧

HttpResponse

用来处理请求的视图函数都必须返回HttpResponse对象

返回字符串类型

render

返回html页面 还可以给页面传值

redirect

重定向

jsonResponse对象

前后端数据交互需要用到json格式

def ab_json(request):
user_dict = {'username':'月神','age':18}
json_str = json.dumps(user_dict,ensure_ascii=False)
return HttpResponse(json_str) from django.http import JsonResponse
return JsonResponse(user_dict) 使用jsonresponse方法可以直接发送数据,但是遇到文字会乱码 如何解决乱码
return JsonResponse(user_dict,json_dumps_params={'ensure_ascii':false}) 直接在json_dumps_params这个方法里面传入 'ensure_ascii':false 就可以了 如何传送列表 l1 = [11,22,33,44] return JsonResponse(l1,safe=False) 其实通过看源码和报错都可以推导出来这些问题

form如何上传文件/request对象获取文件

form表单上传文件


<form action='' method='post' enctype ='multipart/form-data'>
首先必须是post请求 然后设置enctype ='multipart/form-data'属性 < input type='file' name='file'>
前端获取文件, 后端获取文件 file_obj = request.FILES.get('file)
可以获得前端发来的文件对象 如何存储文件
with open(file_obj.name,'wb') as f:
for line in file_obj:
f.write(line) 这样就保存好了前端发来的文件

request对象方法


request.method
获取请求方式
request.POST
获取post请求提交的普通键值对数据 不包括文件
request.GET
获取get请求
request.FILES
获取文件 request.path
获取用户访问的路由 request.path_info request.get_full_path()
获取用户访问的路由及问号后面携带的参数

FBV与CBV

FBV:基于函数的视图;

CBV:基于类的视图;

使用函数实现功能

def index(request):
return render(request,'login.html') 使用面向对象思想通过类实现功能
from django.views import View
#需要导入django.views import View模块
class Mylogin(View):
def get(self,request):
return render(request,'login.html')
def post(self,request):
return render(request,'login.html') 使用CBV路由匹配时
urlpatterns = [
path('login/', views.Mylogin.as_view()),
]
#访问路由 直接访问这个类 然后执行类里面的方法 '''
FBV和CBV各有千秋 CBV特点能够直接根据请求方式不同匹配到对应的方法执行

CBV源码解析

from django.views import View

class MyLogin(View):
def get(self,request):
return render(request,'login.html') def post(self,request):
return render(request,'login.html') 使用 CBV 时,需要 通过 视图类. as_view() 才能进行路由匹配,那么直接观察这个as_view()的源码 urlpatterns = [
path('login/', views.Mylogin.as_view()),
] # as_view() 是一个绑定给 类的方法
# 由于加了()相当于立即执行了类里面的这个函数方法。 @classonlymethod
def as_view(cls,**initkwargs):
def view():
return view
观察返回值能够发现,返回的是内部的一个view函数 通过这里得出结论path('login/', views.Mylogin.as_view()),
相当于 path('login/', views.view),
因为Mylogin.as_view()执行完返回值是view 所以 CBV 路由匹配的本质,就是 FBV

接下来,我们分析一下,当路由匹配成功时,需要执行的这个view函数的源码

@classonlymethod
def as_view(cls, **initkwargs):
... ... # 源码省略 def view(request, *args, **kwargs):
self = cls(**initkwargs) -----> '实例化生成一个对象'
if hasattr(self, 'get') and not hasattr(self, 'head'):
self.head = self.get ----> '给生成的对象添加 head 属性'
self.request = request --> '给生成的对象添加 request 属性'
self.args = args ----> '给生成的对象添加 args 属性'
self.kwargs = kwargs ----> '给生成的对象添加 args 属性'
return self.dispatch(request, *args, **kwargs)
... ... # 源码省略
return view

最后结果就是 return self.dispatch(request, \*args, \**kwargs)

对象 和 产生对象的 类中都没有 dispatch函数,所有需要到 父类view中去找

  http_method_names = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace']

  def dispatch(self, request, *args, **kwargs):

        if request.method.lower() in self.http_method_names:
# 判断当前请求的方法是否符合 8 个 默认的请求方法
handler = getattr(self, request.method.lower(),
# getattr反射
# sele是自己写的类产生的对象 查找get方法,自己写的对象没有 就找对象的父类 也就是我们自己写的类 然后有 get 执行我们类里面的get方法
# handler = 等于我们自己写的get方法 self.http_method_not_allowed)
else:
handler = self.http_method_not_allowed
return handler(request, *args, **kwargs)
# 触发我们函数内部的get方法

Django视图层/FBV与CBV/jsonResponse对象/form表单上传文件/request对象获取文件的更多相关文章

  1. JsonResponse类的使用、form表单上传文件补充、CBV和FBV、HTML的模板语法之传值与过滤器

    昨日内容回顾 Django请求生命周期 # 1.浏览器发起请求 到达Django的socket服务端(web服务网关接口) 01 wsgiref 02 uwsgi + nginx 03 WSGI协议 ...

  2. django 基于form表单上传文件和基于ajax上传文件

    一.基于form表单上传文件 1.html里是有一个input type="file" 和 ‘submit’的标签 2.vies.py def fileupload(request ...

  3. Django---CBV和FBV的使用,CBV的流程,给视图加装饰器,Request对象方法,属性和Response对象,form表单的上传

    Django---CBV和FBV的使用,CBV的流程,给视图加装饰器,Request请求对象方法,属性和Response响应对象,form表单的上传 一丶CBV和FBV       在Django中存 ...

  4. 【jQuery】form表单元素序列化为json对象

    序列化form表单元素为json对象: <!Doctype html> <html xmlns=http://www.w3.org/1999/xhtml> <head&g ...

  5. jQuery将form表单的数据封装成json对象

    /** * 自动将form表单封装成json对象 */ $.fn.serializeObject = function() { var o = {}; var a = this.serializeAr ...

  6. Django表单上传

    任务描述:实现表单提交(上传文件) 1.项目目录: 2.源代码: regist.html <!DOCTYPE html> <html lang="en"> ...

  7. Django视图之FBV与CBV

    一. CBV与FBV CBV:Class Based View FBV:Function Based View 我们之前写过的都是基于函数的view,就叫FBV.还可以把view写成基于类的,那就是C ...

  8. Form表单如何传递List数组对象到后台的解决办法(转)

    举例说明: [后台有一个对象 User    一个PhotoDo对象],结构如下: public class User{ private String username; private List&l ...

  9. form表单在前台转json对象

    会发生序列化乱码问题,待解决. //根据表单id将其内空间,名称,值转为json var fireTraceEquipment =queryParamByFormId('form1'); functi ...

  10. MVC Form 表单 提交 集合 及 复杂对象

    public class Customer { public string FName{get;set;} public Address address{get;set;} } public clas ...

随机推荐

  1. 微信小程序发布与支付

    一.小程序的发布流程 小程序协同工作和发布官网链接 1.背景 小程序的平台里,开发者完成开发之后,需要在开发者工具提交小程序的代码包,然后在小程序后台发布小程序. 2.流程 上传代码 代码管理服务器上 ...

  2. NOIP2015 普及组 洛谷P2671 求和 (数学)

    一道数学题...... 采用分组的思想,我们要统计答案的数对满足两个条件:同奇偶,同颜色.所以可以按这两个要求分组. 然后就是分组处理了,对于每组(有k个数),这里面的任意两对数都是满足条件的,可推出 ...

  3. JAVA员工名字 年龄 工资 工种

    如题: 下面是我个人的写法 输出部分使用了 格式化输出 有兴趣的朋友可以了解一下: 解决的思路大致为: 创建一个对象数组--> 数组下标为0的数组中张三这个变量对应 String name; 2 ...

  4. vue项目Eslint和prettier结合使用

    一.eslint介绍--代码语法检查工具 Eslint是一个代码检查工具,用来检查你的代码语法是否符合指定的规范,ECMAScript标准 二.prettier插件--代码格式化工具 prettier ...

  5. Vue学习之--------Vue中收集表单数据(使用v-model 实现双向数据绑定、代码实现)(2022/7/18)

    文章目录 1.Vue中实现表单数据的收集 1.1 基础知识 1.2 代码实例 1.3 测试效果 1.4 额外插一嘴 1.Vue中实现表单数据的收集 1.1 基础知识 表单中常用的标签:input(输入 ...

  6. day05-JavaScript02

    JavaScript02 8.JavaScript函数 JavaScript函数介绍 函数是由事件驱动的,或者当它被调用时,执行的可重复使用的代码 例子 <!DOCTYPE html> & ...

  7. 优化if、elif过多

    优化if ,elif过多的场景 字典的成员运算,是判断字典的key 思路:把函数的内存地址存到字典当中 def login():    pass def scan(): pass def transf ...

  8. java学习之spring基础

    0x00前言 spring框架应用的是ioc模式,ioc模式是指控制反转模式,本质是你不去创建对象让spring框架给你创建对象你去使用对象.多种开发模式通过配置文件和注解的方式去开发的都很值得去学习 ...

  9. Oracle 表空间常用操作

    aliases: [Oracle表空间] tags:      [数据库,Oracle,Blog] summary: [Oracle表空间常用操作,包括查询.分析.扩容.删除.优化等] date:   ...

  10. mindxdl--common--k8s_utils.go

    // Copyright (c) 2021. Huawei Technologies Co., Ltd. All rights reserved.// Package common define co ...