【1】自定义一个response
# 类似JsonResponse函数的方法class JS(HttpResponse):def __init__(self,data):res = json.dumps(data)return super().__init__(res)
【2】在响应头中放数据的方式
- 1、Httpresponse
- 方式一:直接传headers参数,header默认是一个空字典
- 方式二:利用字典传值方式
from django.shortcuts import render,HttpResponse,redirect# 方式一
def inde(request):return HttpResponse('ok',headers={'xxx','xxx'})# 方式二def index(request):res = HttpRespose('ok')res['xxx'] = 'xxx'return res
- 2、JsonResponse
- 直接传headers参数
- 使用字段传值方式
- 3、render
- 只能使用字典传值方式
- 4、redirect
- 只能使用字典传值方式
使用字典传值方式是通用的,每个方式都能使用
【3】函数和方法的区别
函数:传值时,有几个参数就要传几个参数
函数调用时,不会自动传值
方法:方法传值时,会把自己当成第一个参数传递给方法的第一个参数
方法调用时,会自动传值
利用模块查看一个函数是方法还是函数
from types import FunctionType,MethodTypedef index():pass使用:print(isinstance(add,FunctionType)) # Trueprint(isinstanc(add,MythodType)) # False
【4】开启meida访问
步骤一
在项目的根目录下创建一个media文件夹
步骤二
然后在settings.py文件夹中配置路径
MEDIA_ROOT =os.path.join(BASE_DIR,'media')
步骤三
配置路由:
from django.conf import settingsfrom django.views.static import serve from 项目名 import settingspath('media/<path:path>',serve,kwargs={'document_root':settings.MEDIA_ROOT})''' from django.conf import settings ----------- django内置的django有两个配置文件,一个项目自己的,一个是内置的如果自己配置了,就是用自己配置的,如果没有配置就使用内置的(conf) ----- 内置的如果使用自己配置的,路径没有找到,就找不到如果使用内置的,路径找不到就会使用内置的 '''
如果在settings.py文件中,配置了static文件夹,会自动开启media,在浏览器中可以直接访问。
因为上述原因,所以在static文件夹下不要存重要内容
配置static:
STATICFILES_DIRS = [os.path.join(BASE_DIR,'static')]
media文件及在static文件下面
media上传图片,并在前端页面中显示图片
# from django_demo04 import settings # django 有两套配置文件--》一套是项目自己的,一套内置的
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)# 图片上传成功后,想在浏览器中输入:http://127.0.0.1:8000/media/default.png就能访问到#1 static文件夹,配置文件写好了,会自动开启'''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})'''return HttpResponse('图片上传成功')
【5】页面静态化
-只要用户访问---》就会去查
-做成静态化# 有些页面访问频率很高
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)