Django之视图
Django视图
-
基于nazha老师:http://www.cnblogs.com/liwenzhou/articles/8305104.html
-
前言:对于对小数据的处理,可以直接使用Django内置的数据库sqlite3,
- sqlite: 是一种文件数据库,使用单独一个文件保存数据
- 多用于嵌入式,该文件中类似于mysql也存在很多表
- 在pycharm中连接sqlite3,与mysql类似,首次使用需要在下载驱动
-
视图函数(类)简称为视图,是一个简单的Python函数(类),接受web请求并返回web响应
-
FBV(Function Base View) 和CBV(Class Base View)
-
FBV是基于函数的视图
-
视图函数中通过request.method 的不同进而执行不同的代码
-
实例代码
-
# views.py中 FBV版添加班级 def add_class(request): if request.method == "POST": class_name = request.POST.get("class_name") models.Classes.objects.create(name=class_name) return redirect("/class_list/") return render(request, "add_class.html") # urls.py 中 from app01 import views urlpatterns = [ url(r'^add_class/$', views.add_class) ]
-
-
-
CBV 基于类的视图
-
视图类必须继承 django.views.view
-
在类中定义与请求方法同名的方法
-
urls.py中注册视图的时候区别于FBV要写成 类名.as_view()
-
实例代码
-
# views.py 中 CBV版添加代码 from django.views import View class add_class(View): def get(self, request): return render(request, "add_class.html") def post(self, request): class_name = request.POST.get("class_name") models.Classes.objects.create(name=class_name) return credits("/class_list/") # url.py 中 urlpatterns = [ url(r"^add_class/$", view.add_class.as_views()) ]
-
-
-
-
Request对象和Response对象
-
request对象的属性和方法
- request.method 请求中使用的HTTP方法的字符串表示,全大写
- request.path_info 返回用户访问的url,不包括域名
- request.get_full_path() 获取URL,带参数
- request.GET 包含所有HTTP GET参数的类字典对象
- request.POST.get()
- request.POST.getlist()
- reques.POST 包含所有HTTP POST参数的类字典对象
- request.body 请求体,byte类型 request.POST的数据就是从body里面提取到的
- request.META
- request.FILES 获取到上传文件的的类字典
- request.FILES.get()
- request.FILES.getlist() 上传多个文件
-
上传文件实例
-
1.from表单必须设置 method="POST" action="" enctype="multipart/form-data"
-
2.file_obj = request.FILES.get("xxx")
-
3.file_obj.name
-
4.在本地保存文件
- chunks(chunk_size=自定义字节大小),有chunk_size参数,可以自定义每次接收多少
-
# views.py中上传代码 class Upload2(View): def get(self, request): return render(request, "upload2.html") def post(self, request): name = request.POST.get("name") print(name, "#"*129) filename_obj = request.FILES.get("filename") # 获取上传文件的对象 filename_name = filename_obj.name # 在对象中获取上传文件的名字 print("文件对象:",filename_obj, "文件对象类型:", type(filename_obj), "\n", "文件名字", filename_name, "文件名类型", type(filename_name)) # 文件对象: 323088.jpg 文件对象类型: <class 'django.core.files.uploadedfile.InMemoryUploadedFile'> with open(filename_name, "wb") as f1: for i in filename_obj.chunks(): # chunks() 一种内置的方法,括号内有chunk_size参数,可以自定义每次接收多少, 与for i in filename_obj: 区别不大 f1.write(i) else: return HttpResponse("上传完毕")
# urls.py 中的代码 from app01 import views urlpatterns = [ # url(r"^add_class", views.add_class.as_views()), ]
-
-