视图
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) 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号