1、获取用户请求数据
  1.1 request.GET 获取request.method='GET'的数据
    request.GET.get('name',None)

  1.2 request.POST 获取request.method='POST'的数据
    #一般针对传入的单个值的情形,如type='text','redio','password':
      request.POST.get('name',None)
    #一般针对传入的多个值的情形,如type='checkbox';<select multiple><option></option></select>
      request.POST.getlist('name',None)

  1.3 request.FILES 获取form表单文件
  获取文件时,POST中不带有其他信息,两者独立开来,更加方便使用。
  特别注意的是,只有当request方法是POST,且发送request的<form>有属性enctype="multipart/form-data"时,request.FILES中包含文件数据,否则request.FILES为空。

  PS:一般情形下,默认开发时,GET和POST在不同情形下使用。
    GET:获取数据
    POST:提交数据

2、checkbox等多选的内容
  request.POST.getlist()

3、上传文件

 <form action="/login" method="POST" enctype="multipart/form-data"> # 上传文件,form标签做特殊设置
<input type="file" name="fafafa"/>
</form>

login.html:

 def login(request):
if request.method=='GET':
return render(request,'login.html')
elif request.method=='POST':
obj=request.FILES.get('fafafa')
import os
file_path=os.path.join('upload',obj.name)
f=open(file_path,'wb')
for i in obj.chunks():
f.write(i)
f.close()

views.py:

4、FBV & CBV
  4.1 FBV(function base views) 就是在视图里使用函数处理请求

 from django.conf.urls import url
from django.contrib import admin
from app01 import views urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^index',views.index),
]

urls.py:

 from django.shortcuts import HttpResponse
def index(request):
return HttpResponse('Index')

views.py:

  4.2 CBV(class base views) 就是在视图里使用类处理请求。

 from django.conf.urls import url
from django.contrib import admin
from app01 import views urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^login',views.login),
url(r'^index',views.index),
url(r'^home/', views.Home.as_view()), #views.类名.as_view()是固定用法。
]

urls.py:

 from django.shortcuts import render
from django.views import View
class Home(View):
def get(self,request):
print(request.method)
return render(request, 'home.html') def post(self,request):
print(request.method)
return render(request, 'home.html')

views.py:

  # 类要继承 View ,类中函数名必须小写。

  注:
    class View(object):
    """
      Intentionally simple parent class for all views. Only implements
      dispatch-by-method and simple sanity checking.
    """

    http_method_names = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace'] #所有的request.method方法。

从客户端接收到请求头后,会先执行View中的dispatch方法,再通过反射的方式找到对应的request.method的方法。
如果想要在dispatch中增加部分功能,可以在继承View类时,重写dispatch方法。

 from django.views import View
class Home(View):
def dispatch(self, request, *args, **kwargs):
# 调用父类中的dispatch
print('before')
result = super(Home,self).dispatch(request, *args, **kwargs)
print('after')
return result def get(self,request):
print(request.method)
return render(request, 'home.html') def post(self,request):
print(request.method)
return render(request, 'home.html')

建议:两者都用,在不同的框架内,有些两者都支持,有些只支持其中之一。两种在生产环境中没有优先级,均可使用。

5、装饰器
后补

6、给用户返回数据的方式

  render(request, "templates内模板的文件的路径", {'k1': [1,2,3,4],"k2": {'name': '张扬','age': 73}})
  redirect("URL")
  HttpResponse(字符串)

最新文章

  1. MySQL流程函数
  2. 用Backbone.js创建一个联系人管理系统(四)
  3. 手机H5 web调试利器——WEINRE (WEb INspector REmote)
  4. C++ Primer 笔记(2)第二章 变量与基本类型
  5. Esper系列(一)初探
  6. 关闭 sqlserver提示信息
  7. SqlSever 查询基本
  8. [转载] HTTP协议详解
  9. BZOJ_4325_NOIP2015 斗地主_DFS
  10. C博客作业01--分支,顺序结构
  11. vue 项目全局修改element-ui的样式
  12. redis 启动停止脚本
  13. centos make error: fatal error: curses.h: No such file or directory
  14. linux装sqlite3
  15. 如何利用jsp实现防盗链功能
  16. Jmeter之八大可执行元件及执行顺序
  17. Learning to act by predicting the future
  18. New Concept English Two 10 25
  19. 28. Implement strStr() (String)
  20. Vue1.x 到Vue2.0的一个变化

热门文章

  1. Golang入门(1):安装与配置环境变量的意义
  2. Linux 压缩备分篇(一 备份数据)
  3. Mysql fundamental knowledge
  4. 刨根问底系列(2)——stdin、stdout、FILE结构体、缓冲区和fflush的理解
  5. Markdown 语法自用
  6. Wpf之HandyControls与MaterialDesign混用之DataGrid
  7. 通过String的不变性案例分析Java变量的可变性
  8. L11注意力机制和Seq2seq模型
  9. JS 的基础概念
  10. php7.2.1+redis3.2.1 安装redis扩展(windows系统)