昨日作业分析

2023-12-01 00:44
文章标签 分析 作业 昨日

本文主要是介绍昨日作业分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

自己封装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.chinasem.cn/article/439177

相关文章

MySQL表锁、页面锁和行锁的作用及其优缺点对比分析

《MySQL表锁、页面锁和行锁的作用及其优缺点对比分析》MySQL中的表锁、页面锁和行锁各有特点,适用于不同的场景,表锁锁定整个表,适用于批量操作和MyISAM存储引擎,页面锁锁定数据页,适用于旧版本... 目录1. 表锁(Table Lock)2. 页面锁(Page Lock)3. 行锁(Row Lock

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

C#使用DeepSeek API实现自然语言处理,文本分类和情感分析

《C#使用DeepSeekAPI实现自然语言处理,文本分类和情感分析》在C#中使用DeepSeekAPI可以实现多种功能,例如自然语言处理、文本分类、情感分析等,本文主要为大家介绍了具体实现步骤,... 目录准备工作文本生成文本分类问答系统代码生成翻译功能文本摘要文本校对图像描述生成总结在C#中使用Deep

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制

Redis主从复制的原理分析

《Redis主从复制的原理分析》Redis主从复制通过将数据镜像到多个从节点,实现高可用性和扩展性,主从复制包括初次全量同步和增量同步两个阶段,为优化复制性能,可以采用AOF持久化、调整复制超时时间、... 目录Redis主从复制的原理主从复制概述配置主从复制数据同步过程复制一致性与延迟故障转移机制监控与维

Redis连接失败:客户端IP不在白名单中的问题分析与解决方案

《Redis连接失败:客户端IP不在白名单中的问题分析与解决方案》在现代分布式系统中,Redis作为一种高性能的内存数据库,被广泛应用于缓存、消息队列、会话存储等场景,然而,在实际使用过程中,我们可能... 目录一、问题背景二、错误分析1. 错误信息解读2. 根本原因三、解决方案1. 将客户端IP添加到Re

Redis主从复制实现原理分析

《Redis主从复制实现原理分析》Redis主从复制通过Sync和CommandPropagate阶段实现数据同步,2.8版本后引入Psync指令,根据复制偏移量进行全量或部分同步,优化了数据传输效率... 目录Redis主DodMIK从复制实现原理实现原理Psync: 2.8版本后总结Redis主从复制实

锐捷和腾达哪个好? 两个品牌路由器对比分析

《锐捷和腾达哪个好?两个品牌路由器对比分析》在选择路由器时,Tenda和锐捷都是备受关注的品牌,各自有独特的产品特点和市场定位,选择哪个品牌的路由器更合适,实际上取决于你的具体需求和使用场景,我们从... 在选购路由器时,锐捷和腾达都是市场上备受关注的品牌,但它们的定位和特点却有所不同。锐捷更偏向企业级和专

Spring中Bean有关NullPointerException异常的原因分析

《Spring中Bean有关NullPointerException异常的原因分析》在Spring中使用@Autowired注解注入的bean不能在静态上下文中访问,否则会导致NullPointerE... 目录Spring中Bean有关NullPointerException异常的原因问题描述解决方案总结