views
views较多时:创建views文件夹 apps.name.view.filename
导入
-
能用绝对导入就用绝对导入
-
不在根目录下使用相对导入
request参数
常见参数
参数 | 内容 |
---|---|
path_info | 当前url |
method | 请求方式 |
headers | 请求头 |
获取cookice
requests.CookIES["name"]
获取参数
get
request.GET.get("xxx")
post
request.POST.get("xxx")
file文件:
request.FILES.get("n2")
request参数源码:@property
a.file() 可以有 a.file, 一样返回
返回数据
from django.shortcuts import render,HttpResponse,redirect
from django.http import JsonResponse
- HttpResponse 返回文本,字节,字符串(图片验证码)
- redirect 重定向(值可以是url|urls里的name)
- JsonResponse 返回json数据
相当于 HttpResponse (json.dumps())
-
render渲染
render(request,"xxx.html")
在项目根目录下创建templates目录 再setting文件夹下注册TEMPLATE 参数
'DIRS':[]
根目录下没有,按照顺序在注册了的app下的templates目录下找
响应体
res=HttpResponse("name")
res["xx"]="xxx"
响应体增加Headers里增加 xx:xxx
CBV和FBV
CBV
from django.views import View
class xxView(View):
def get(self,request):
xxx
def post(self,request):
xxx
静态资源:
静态文件:开发需要的静态文件;/static/(根目录下)
setting.py
STATIC_URL = '/static/'
STATICFILES_DIRS=(
os.path.join(BASE_DIR,"static")
)
没有的话在注册的app下的static下找
目录建议:static/app_name
统一路径
# 寻找setting 下的static路径,创建static变量
{% load static %}
使用static变量
{% static "api/1.png"}
媒体文件:用户上传的文件; /media/(根目录下)
在url里增加media的访问
from django.conf.urls.static import static
from django.conf import settings
urlpatterns = [
]+static(settings.MeDIA_URL,document_root=settings.MEDIA_ROOT)
类视图(CBV)
from django.views.generic import View
class RegisterView(View):
"""类视图:处理注册"""
def get(self, request):
"""处理GET请求,返回注册页面"""
return render(request, 'register.html')
# 处理字符串乱码的问题
# 中文乱码
return JsonResponse(book_list,safe=False,json_dumps_params={"ensure_ascii":False})
def post(self, request):
"""处理POST请求,实现注册逻辑"""
return HttpResponse('这里实现注册逻辑')
配置路由时,使用类视图的as_view()
方法来添加。
urlpatterns = [
# 视图函数:注册
# url(r'^register/$', views.register, name='register'),
# 类视图:注册
url(r'^register/$', views.RegisterView.as_view(), name='register'),
]
原生序列化
from django.core.serializers import serialize
class CourseView(APIView):
def get(self, request):
# 2.获取queryset
course_obj = models.Course.objects.all()
# 3.序列化
serialized_data = serialize("json", course_obj)
print(serialized_data)
# 4.将序列化之后的数据返回
return HttpResponse(serialized_data)