django_day03
django_day03
Django的view(视图)
CBV和FBV
FBV:function based view 基于函数的视图
CBV:class based view 基于类的视图
from django.views import View class Xxx():
def get(self,request):
#专门处理get请求
return response
def post(self,request):
#专门处理post请求
return responseurl(r'xx/',Xxx.as_view())
class PublisherAdd(View): def get(self,request):
print("get请求被执行")
#处理get请求
return render(request, 'publisher_add.html') def post(self,request):
print("post请求被执行")
#处理post请求
pub_name = request.POST.get('pub_name')
#print(pub_name)
if not pub_name:
# 输入为空
return render(request, 'publisher_add.html', {'error': '不能为空!!'})
if models.Publisher.objects.filter(name=pub_name):
return render(request, 'publisher_add.html', {'error': '已存在!'})
ret = models.Publisher.objects.create(name=pub_name)
#print(ret, type(ret))
return redirect('/publisher_list/')
urlpatterns = [
url(r'^publisher_add/', views.PublisherAdd.as_view()),
]
as_view流程
项目运行时加载urls.py的文件 执行类as_view方法
as_view()执行后 内部定义了一个view函数 并且返回
请求到来的时候,执行view函数:
实例化类--》self
self.request = request
执行self.dispatch(request, *args, **kwargs)的方法
判断请求方式是否被允许
允许:
通过反射获取请求方式对应的请求方法 ——》 handler
获取不到 self.http_method_not_allowed ——》 handler
不允许:
self.http_method_not_allowed ——》 handler
执行handler,返回结果
from functools import wraps def timer(func):
@wraps(func)#不加的话获取的方法一直时inner wraps原理
def inner(request, *args, **kwargs): start = time.time()
ret = func(request, *args, **kwargs)
print('执行的时间是:{}'.format(time.time() - start))
return ret return inner
FBV
直接加在函数上就行
CBV加装饰器:
需要使用一个装饰器
from django.utils.decorators import method_decorator
加在方法上
@method_decorator(timer)
def get(self, request):
加在dispatch方法上
@method_decorator(timer)
def dispatch(self, request, *args, **kwargs):
# 之前的操作
ret = super().dispatch(request, *args, **kwargs) # 执行View中的dispatch方法
# 之后的操作
return ret3 @method_decorator(timer,name='dispatch')
class PublisherAdd(View):
加在类上
@method_decorator(timer,name='post')
@method_decorator(timer,name='get')
class PublisherAdd(View):
request
request.method 请求方法 GET POST
request.GET URL上携带的参数 ?k1=v1&k2=v2 { }
request.POST post请求提交的数据 {} 编码方式是URLencode
request.path_info 路径信息 不包含IP和端口 也不包含参数
request.body 请求体 bytes类型 #post请求才有 数据
request.COOKIES cookie
request.session session
request.FILES 长传的文件
request.META 头的信息 小写——》大写 HTTP_ 开头 - ——》 _ request.get_full_path() 完整的路径信息 不包含IP和端口 包含参数
request.is_ajax() 请求是否是ajax请求response
from django.shortcuts import render, HttpResponse, redirect HttpResponse('字符串') # 返回字符串
render(request,'模板的文件名',{'k1':v1}) # 返回一个HTML页面
redirect('地址') # 重定向 Location:‘地址’ 301 302
from django.http.response import JsonResponse
JsonResponse({'k1':'v1'})
JsonResponse(data,safe=False)
上传文件
urls.py
url(r'^upload/', views.Upload.as_view()),
视图:
class Upload(View): def get(self, request):
return render(request, 'upload.html')
def post(self, request):
file = request.FILES.get('f1')
with open(file.name, 'wb') as f:
for i in file:
f.write(i)
return HttpResponse('ok')
upload.html
<form action="" method="post" enctype="multipart/form-data">
{% csrf_token %} <input type="file" name="f1">
<button>上传</button>
</form>
django_day03的更多相关文章
随机推荐
- C++ 炼气期之变量的生命周期和作用域
1. 前言 什么是变量的生命周期? 从变量被分配空间到空间被收回的这一个时间段,称为变量的生命周期. 什么是变量的作用域? 在变量的生命周期内,其存储的数据并不是在任何地方都能使用,变量能使用的范围, ...
- Linux常用命令-软件包管理工具-rpm
命令简介 rpm(RPM Package Manager)是一个强大的命令行驱动的软件包管理工具,用来安装.卸载.校验.查询和更新 Linux 系统上的软件包. 语法格式 rpm [OPTION... ...
- 用Typescript 的方式封装Vue3的表单绑定,支持防抖等功能。
Vue3 的父子组件传值.绑定表单数据.UI库的二次封装.防抖等,想来大家都很熟悉了,本篇介绍一种使用 Typescript 的方式进行统一的封装的方法. 基础使用方法 Vue3对于表单的绑定提供了一 ...
- SAP创建XML 文件
TYPES: BEGIN OF xml_line_type, data(256) TYPE x, END OF xml_line_type, xml_tab_type TYPE TABLE OF xm ...
- 期末人福音——用Python写个自动批改作业系统
一.亮出效果 最近一些软件的搜题.智能批改类的功能要下线. 退1024步讲,要不要自己做一个自动批改的功能啊?万一哪天孩子要用呢! 昨晚我做了一个梦,梦见我实现了这个功能,如下图所示:功能简介:作对了 ...
- java SWT中Label实时刷新当前时间
同样最近在开发swt的一个项目,业务中的一个功能模块类似百度网盘的上传进度条 0/80. 即已上传0个,总共80个.效果展示要的就是实时刷新,2/80呀,15/80呀,针对这个,就有了这篇文章. 下面 ...
- Java中时间方法大全01(持续更新)
下面这些方法都可以封装到一个工具类中 /** * 获取当前时间的时间戳 */ public static int getCurrentTimeIntValue() { return (int) (Sy ...
- NC20806 区区区间间间
NC20806 区区区间间间 题目 题目描述 给出长度为n的序列a,其中第i个元素为 \(a_i\),定义区间(l,r)的价值为 \(v_{l,r} = max(a_i - a_j | l \leqs ...
- 深度学习基础-基于Numpy的多层前馈神经网络(FFN)的构建和反向传播训练
本文是深度学习入门: 基于Python的实现.神经网络与深度学习(NNDL)以及花书的读书笔记.本文将以多分类任务为例,介绍多层的前馈神经网络(Feed Forward Networks,FFN)加上 ...
- 001 Redis 配置
Redis缓存 1.配置Redis //Redis 配置文件 @Configuration public class RedisConfiguration { @Bean public RedisTe ...