昨日作业分析

自己封装response

  • response.py
from django.shortcuts import HttpResponse
import jsonclass MyResponse(HttpResponse):def __init__(self,data):res = json.dumps(data,ensure_ascii=False)return super().__init__(res)
  • views.py
from django.shortcuts import render# Create your views here.
from app01.response import MyResponsedef index(request):return MyResponse({'code':100,'msg':'请求成功'})

在响应头中放数据

  • HttpResponse
def index(request):1.第一种方法return HttpResponse('ok',headers={'xxx':'xxx'})2.第二种方法obj = HttpResponse('ok')obj['yyy'] = 'yyy'  # 像字典一样放入,最终会放在http的响应头中return obj
  • redirect
    def index(request):# return redirect('http://www.baidu.com')# res=resolve_url('login')# return redirect('/login', headers={'xxx': 'ssss'})  # 不生效obj = redirect('/login')obj['xxx'] = 'xxx'return obj
  • render
   def index(request):# return render(request,'index.html',headers={'xxx': 'ssss'}) # 不行obj = render(request, 'index.html')obj['xxx'] = 'xxx'return obj
  • JsonResponse
    def index(request):# return JsonResponse({'name':'lqz'},headers={'xxx': 'ssss'})obj=JsonResponse({'name':'xxx'})obj['yyy']='yyy'return obj

函数和方法区别--》绑定方法区别

绑定给对象的方法---》对象来调用
绑定给类的方法---》类来调用

class Person:# 对象绑定方法---》写在类中,没有任何装饰器def run(self):# print(self.name)print('人走路')@classmethoddef xx(cls):# 把类传入了,类可以实例化得到对象p = cls()  # 直接类实例化得到对象,要不要传参数,取决于Person类有没有写__init__print(p)print('类的绑定方法,xxx')# 静态方法--->本质就是个函数@staticmethoddef yy():print('staticmethod')

对象绑定方法

p = Person()
p.run()类来调用对象的绑定方法---》这个方法就变成了普通函数,有几个值就要传几个值
正常需要传这个类的对象---》因为可能方法内部使用了对象
但是如果内部没有使用对象---》可以随意传个对象
Person.run(1)
Person.run(Person())

绑定给类的方法

Person.xx()  # 正统 类来调用
Person().xx()
p=Person()
p.xx() # 对象来调用,类的绑定方法,会自动把当前对象的类拿到,传入进去

静态方法

Person.yy()  # 类来调用
Person().yy() # 对象来调用

总结:函数和方法

方法有特殊性,绑定给谁,就需要谁来调用,调用时会自动传值---》只能能自动传值,它就是个方法
 函数,有几个值就要传几个值,不能多也不能少

查看一个 '函数' 到底是函数还是方法

from types import FunctionType, MethodType
def add():pass
print(isinstance(add,FunctionType)) # True
print(isinstance(add,MethodType)) # Falsprint(isinstance(Person.xx,FunctionType)) # False  #类来调用是个方法
print(isinstance(Person.xx,MethodType)) #Trueprint(isinstance(Person().xx,FunctionType)) # False  #类来调用是个方法
print(isinstance(Person().xx,MethodType)) #Trueprint(isinstance(Person.yy,FunctionType)) # True  静态方法,自动传值了吗? 没有,就是函数
print(isinstance(Person.yy,MethodType)) #Falseprint(isinstance(Person().run,FunctionType)) # false
print(isinstance(Person().run,MethodType)) #Trueprint(isinstance(Person.run,FunctionType)) #True 不能自动传值---》就是函数
print(isinstance(Person.run,MethodType)) #False

开启media访问

from django_demo04 import settings  # django 有两套配置文件--》一套是项目自己的,一套内置的
  • view.py
from  django.conf import settings
# from django_demo04 import settings
def upload_img(request):myfile=request.FILES.get('myfile')print(settings.MEDIA_ROOT)# print(settings.MEDIA_URL)# with open(settings.MEDIA_ROOT+'/%s'% myfile.name,'wb')as f:with open('media/%s' % myfile.name, 'wb') as f:for line in myfile:f.write(line)return HttpResponse("图片上传成功")# 图片上传成功后,想在浏览器中输入:http://127.0.0.1:8000/media/default.png就能访问到
  •  settings.py
STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
  • urls.py
from app01.views import index,login,upload_img
from django.views.static import serve
from django.conf import settings
urlpatterns = [path('admin/', admin.site.urls),path('', index),path('login/',login,name='login'),path('upload_img/',upload_img),re_path('^media/(?P<path>.*)',serve,kwargs={'document_root':settings.MEDIA_ROOT}),# path('media/<path:path>',serve,kwargs={'document_root':settings.MEDIA_ROOT}),# path('/login2',login,name='new_login'),]

重点:

    1 static文件夹,配置文件写好了,会自动开启# static 文件夹,只要配置如下,就会自动开启---》浏览器中可以直接访问到它---》所以在static文件夹下不要重要内容,因为客户端可以直接下载访问STATIC_URL = '/static/'STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]2 我们想让media这个文件夹像static文件夹一样,能被用户浏览器访问---》自己开启路由-->url中写路由访问的路径是:http://127.0.0.1:8000/       media/default.png-正则方法  re_path  re_path('^media/(?P<path>.*)', serve, kwargs={'document_root': settings.MEDIA_ROOT}),media/      img/default.png访问meida这种路径,django会去 document_root指定的文件夹下找对应的文件-转换器   pathpath('media/<path:path>', serve, kwargs={'document_root': settings.MEDIA_ROOT})3 以后想开启media的访问1 在项目根路径创建media文件2 在配置文件中配置MEDIA_ROOT = os.path.join(BASE_DIR, 'media')3 路由中配置:path('media/<path:path>', serve, kwargs={'document_root': settings.MEDIA_ROOT})

页面静态化

# 有些页面访问频率很高
from .models import Book
from django.conf import settings
from django.template import Template, Context
def books_view(request):# 做静态化if os.path.exists(os.path.join(settings.BASE_DIR, 'cache', 'books.html')):print('不走数据库')with open('cache/books.html', 'rt', encoding='utf-8') as f:res_str = f.read()return HttpResponse(res_str)else:books = Book.objects.all()with open('templates/books.html', 'rt', encoding='utf-8') as f:res = f.read()t = Template(res)c = Context({'books': books})html = t.render(c)# 保存起来with open('cache/books.html', 'wt', encoding='utf-8') as f:f.write(html)return HttpResponse(html)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/185856.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单片机开发方式

一、不借助芯片厂家的函数库 在进行单片机开发时&#xff0c;如果选择不使用SPL、HAL等开发库&#xff0c;可以采用以下替代方案&#xff1a; 寄存器级编程&#xff1a;使用寄存器级编程&#xff0c;直接操作硬件寄存器来配置和控制外设。每个外设都有一组寄存器&#xff0c;用…

【09】Python流程控制

【09】Python流程控制 文章目录 1.条件语句1.1 `if`语句1.2 `if-else`语句1.3 `if-elif-else`语句1.4 `pass`关键字2.函数补充2.1 `input()`函数2.2 `range()`函数3.循环语句3.1 `for`循环3.2 `while`循环3.3`break`和`continue`语句3.3.1 `break`3.3.2`continue`4. 列表的

[UGUI]Unity背包系统制作详细步骤

二、背包制作 1.创建空物体&#xff0c;然后创建UI-Image 制作背包整个背包所在的父UI的背景图 选中BG&#xff0c;找到他的锚点设置&#xff0c;按住Alt键&#xff0c;点击右下角的适配&#xff0c;让锚点和内容都匹配画布 PS&#xff1a;不按Alt键是设置一个元素的锚点位…

leetcode算法之链表

目录 1.两数相加2.两两交换链表中的节点3.重排链表4.合并K个升序链表5.K个一组翻转链表 1.两数相加 两数相加 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(…

java mail集成james判断邮件是否发送成功

项目场景&#xff1a; java mail集成james邮件服务器&#xff0c;发送邮件时需要判断邮件是否发送成功。我们会发现JavaMail给用户发送邮件&#xff0c;但是调用Transport类的sendMessage方法发送的邮件是没有返回值的&#xff0c;所以判断不了。 但是我们可以用另一个解决方案…

TDI网络过滤驱动应用(一)

文章目录 TDI网络过滤驱动应用1. 技术概览2. 数据包的抓取3. 应用实例3.1 TrafficShaper(限流)3.2 DnsRedirector(DNS重定向)3.3 TcpRedirector(TCP重定向) 4. 总结与参考 TDI网络过滤驱动应用 在前面的文章中&#xff0c;我们分析了TDI网络过滤驱动的基本开发框架以及TDI网络…

C/C++ 实现FTP文件上传下载

FTP&#xff08;文件传输协议&#xff09;是一种用于在网络上传输文件的标准协议。它属于因特网标准化的协议族之一&#xff0c;为文件的上传、下载和文件管理提供了一种标准化的方法&#xff0c;在Windows系统中操作FTP上传下载可以使用WinINet库&#xff0c;WinINet&#xff…

微服务--07--Seata 分布式事务

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 分布式事务1.认识Seata2.部署TC服务2.1.准备数据库表2.2.准备配置文件2.3.Docker部署 3.微服务集成Seata3.1.引入依赖3.2.改造配置3.3.添加数据库表3.4.测试 分布式…

什么是网络安全 ?

网络安全已成为我们生活的数字时代最重要的话题之一。随着连接设备数量的增加、互联网的普及和在线数据的指数级增长&#xff0c;网络攻击的风险呈指数级增长。 但网络安全是什么意思&#xff1f; 简而言之&#xff0c;网络安全是一组旨在保护网络、设备和数据免受网络攻击、…

Zabbix“专家坐诊”第213期问答汇总

问题一 Q&#xff1a;Zabbix报错&#xff1a;Zabbix server is not running :the information displayed may not be current&#xff0c;是什么问题呢&#xff1f; A&#xff1a; 1、数据库软件问题导致导入的zabbix数据库不完整2、zabbix Server配置问题3、zabbix-server没…

大数据基础设施搭建 - Maxwell

文章目录 一、上传压缩包二、解压压缩包三、启用MySQL Binlog3.1 修改MySQL配置文件3.2 重启MySQL服务3.3 测试 四、创建Maxwell所需数据库和用户4.1 创建数据库4.2 调整MySQL数据库密码级别4.3 创建Maxwell用户并赋予其必要权限4.4 测试 五、修改配置文件5.1 修改Maxwell配置文…

【【FPGA的 MicroBlaze 的 介绍与使用 】】

FPGA的 MicroBlaze 的 介绍与使用 可编程片上系统&#xff08;SOPC&#xff09;的设计 在进行系统设计时&#xff0c;倘若系统非常复杂&#xff0c;采用传统 FPGA 单独用 Verilog/VHDL 语言进行开发的方式&#xff0c;工作量无疑是巨大的&#xff0c;这时调用 MicroBlaze 软核…

laravel 重写批量添加,自动维护时间戳

laravel 自带的批量添加是不会自动维护时间戳的&#xff0c;意思是说&#xff0c;使用laravel的批量添加&#xff0c;时间戳字段不会插入&#xff0c;也不会在更新的时候进行更新。 使用继承或者trait来解决这个问题&#xff0c;在这里感谢Mr.wen <?php namespace App\Mo…

作 业

1. 查出至少有一个员工的部门。显示部门编号、部门名称、部门位置、部门人数。 mysql> SELECT d.deptno AS 部门编号, d.dname as 部门名称, d.loc as 部门位置, COUNT(e.empno) as 部门人数 FROM dept d JOIN employee e ON d.deptno e.deptno GROUP BY d.deptno, d.dname…

LeetCode 1657. 确定两个字符串是否接近:思维题

【LetMeFly】1657.确定两个字符串是否接近&#xff1a;思维题 力扣题目链接&#xff1a;https://leetcode.cn/problems/determine-if-two-strings-are-close/ 如果可以使用以下操作从一个字符串得到另一个字符串&#xff0c;则认为两个字符串 接近 &#xff1a; 操作 1&…

nvm 下载node时候下载不到npm包的解决方法

个人博客链接 公众号-nvm 下载node时候下载不到npm包的解决方法 求关注 可以跳过的背景 最近项目比较有空&#xff0c;所以就可以有时间写一些demo&#xff0c;主要测试下react的一些语法&#xff0c;毕竟自己上次写react已经是22年的7月份了,期间对于react-router等的hook…

Java中的Integer.bitCount浅析

文章目录 Java中的Integer.bitCount浅析问题思考Integer.bitCount解释拓展 Java中的Integer.bitCount浅析 原文链接 问题 有一个整数x,我们需要统计该整数的二进制表示中包含的1的个数。这个也被称为汉明重量&#xff08;Hamming weight&#xff09;。 例如&#xff0c;整数…

000 - 前言

目录 问题1&#xff1a;学Qt之前是不是得先把C基础打好才行&#xff1f;会一点点C可以学吗&#xff1f; 问题2&#xff1a;我已经会 PyQt 了&#xff0c;还有必要再学 Qt 吗&#xff1f; 问题3&#xff1a;Qt 和 QML 学哪个比较好呢&#xff1f; 大家好呀~ 我是角角。从今天…

创建JDK8版本的SpringBoot项目的方法

目录 一.通过阿里云下载 二.通过IDEA创建 1.下载安装JDK17 2.创建SpringBoot 3.X的项目 3.把JDK17改成JDK8 截止到2023.11.24&#xff0c;SpringBoot不再支持3.0X之前的版本&#xff0c;3.0X之后的版本所对应的JDK版本为JDK17&#xff0c;下面介绍如何在idea上继续使用JDK…

解析javascript数组方法 find 和 filter 有何区别

首先用一个案例可以很直观的看到 find 和 filter 的区别&#xff1b; 相同点&#xff1a; 两者分别可以接受三个参数&#xff1a;当前元素、当前索引、整个数组&#xff1b;两者都可以用来查找数组中符合条件的元素&#xff1b; 不同点&#xff1a; find&#xff1a; 用于查…