如何用flashfxp上传网站,网站开发工资一般多少钱,哪些公司是wordpress,wordpress 登录后查看【一】三板斧
【1】HttpResponse
返回字符串类型
【2】render
返回html页面#xff0c;并且在返回给浏览器之前还可以给html页面传值
【3】redirect
重定向页面 在视图文件中写视图函数的时候不能没有返回值了#xff0c;默认返回的是None#xff0c;页面上就会报错 d…【一】三板斧
【1】HttpResponse
返回字符串类型
【2】render
返回html页面并且在返回给浏览器之前还可以给html页面传值
【3】redirect
重定向页面 在视图文件中写视图函数的时候不能没有返回值了默认返回的是None页面上就会报错 def render(request, template_name, contextNone, content_typeNone, statusNone, usingNone):content loader.render_to_string(template_name, context, request, usingusing)return HttpResponse(content, content_type, status)
【二】JsonReponse序列化类的使用
序列化 json格式的数据 {a:1} json有什么用 跨语言传输 序列化:json.dumps 反序列化:json.loads
from django.http import JsonResponse
def index(request):user_dict {username:kevin你好}user_dict [1, 2, 3, 4]resjson.dumps(user_dict,ensure_asciiFalse)return HttpResponse(res)#通过看源码学技术return JsonResponse(user_dict,json_dumps_params{ensure_ascii:False})return JsonResponse(user_dict,safeFalse)return render(request,index.html)
【三】form表单文件上传下载 form表单上传数据以及后端如何获取 form知识回顾
form action methodpost enctypemultipart/form-data/form
form表单想要上传文件类型的数据 method 参数必须改为postenctype 参数必须指定成 form-data 类型
【2】数据处理
(1)POST请求数据
print(request.POST) # 接收的都是普通的数据非文件数据MultiValueDict: {myfile: [InMemoryUploadedFile: 234.png (image/png)]}
print(request.FILES) # 只接受文件数据普通数据还在request.POST里面
def index(request):user_dict {username:kevin你好}user_dict [1, 2, 3, 4]resjson.dumps(user_dict,ensure_asciiFalse)return HttpResponse(res)# 通过看源码学技术return JsonResponse(user_dict,json_dumps_params{ensure_ascii:False})return JsonResponse(user_dict,safeFalse)return JsonResponse(user_dict,safeFalse)QueryDict: {myfile: [234.png]}QueryDict: {}print(request.POST)MultiValueDict: {myfile: [InMemoryUploadedFile: 234.png (image/png)]}file_objrequest.FILES.get(myfile)file_list file_obj.name.split(.) # 123.png
(2)文件数据获取 import uuidrandom_strstr(uuid.uuid4())file_name random_str file_obj.name.split(.)[-1]with open(file_name, wb) as f:for line in file_obj:f.write(line)print(request.body) # 接收纯原生的二进制数据没有任何的处理 b---- str----decode----dict...print(request.POST.get()) # 之所以你能够直接按照字典的方式取值是因为django给做了封装print(request.path) # /index/ /index/print(request.path_info) # /index/ /index/print(request.get_full_path()) # /index/ /index/?a1b2print(request.GET.get())return render(request,index.html)
【四】总结request对象方法
【1】request.method
request.method该方法返回客户端用于发起请求的HTTP方法。例如可以是GET、POST、PUT、DELETE等。您可以使用该方法来确定请求的类型并相应地执行特定操作。
【2】request.POST
request.POST该属性是一个类似字典的对象包含了请求中通过POST方法发送的所有参数。这些参数通常是通过HTML表单发送的。您可以使用参数的名字作为键来访问单个参数例如request.POST[username]。
【3】request.GET
request.GET类似于request.POST该属性包含了请求中通过GET方法发送的所有参数。这些参数通常会附加在URL之后以问号分隔。您可以使用参数的名字作为键来访问单个参数例如request.GET[page]。
【4】request.FILES
request.FILES该属性是一个类似字典的对象包含了请求中通过文件上传组件发送的所有文件。当表单中包含文件上传字段时通过request.FILES可以访问上传的文件。您可以使用文件的名字作为键来访问单个文件例如request.FILES[file]。
【5】request.path 只能获取到路由地址无法获取到参数 request.path该属性表示请求URL中的路径部分。它包含在域名之后在任何查询参数之前。例如如果请求的URL是http://example.com/foo/bar/那么request.path将为/foo/bar/。
【6】request.path_info 只能获取到路由地址无法获取到参数 用于表示请求URL的路径部分不包括域名和查询参数。与 request.path 相比request.path_info 更加原始和未经解析。它保留了URL路径中的任何编码、特殊字符或斜杠等信息。
例如对于以下请求URLhttp://example.com/foo/bar/?page2request.path_info 的值将是 /foo/bar/。
通常情况下您可以使用 request.path 来获取丢弃域名后的路径而使用 request.path_info 来获取原始的、未解析的路径。这在某些情况下非常有用例如当您需要对URL进行一些自定义操作或路由处理时。
【7】request.get_full_path() 即能获取到路由地址又能获取到完整的路由地址后面的参数 request.get_full_path()该方法返回请求URL的完整路径包括路径部分和任何查询参数。当您需要将完整URL作为字符串使用时这个方法非常有用。例如如果请求的URL是http://example.com/foo/bar/?page2request.get_full_path()将返回/foo/bar/?page2。
【四】FBV与CBV引入 视图函数既可以是函数也可以是类 【1】FBV
def index(request):return HttpResponse(index)
【2】CBV
(1)CBV的写法
from django.views import Viewclass MyLogin(View):def get(self, request):print(get。。。)return HttpResponse(get)def post(self, request):return HttpResponse(hello postman!!!)url(r^login/, views.MyLogin.as_view()),
(2)CBV的源码分析
# 入口
url(r^login/, views.MyLogin.as_view()),# View类中得as_view方法的返回值是view函数名
# 当请求来的时候会触发view函数的执行
def view(request, *args, **kwargs):# cls:Mylogin()------self对象self cls(**initkwargs)return self.dispatch(request, *args, **kwargs) # View类里的dispatchdef dispatch(self, request, *args, **kwargs):if request.method.lower() in self.http_method_names:handler getattr(self, request.method.lower(), self.http_method_not_allowed)else:handler self.http_method_not_allowedreturn handler(request, *args, **kwargs)from django.views import Viewclass MyLogin(View):http_method_names [get, post]def get(self, request):print(get。。。)self.index()return HttpResponse(get)def post(self, request):return HttpResponse(hello postman!!!)def index(self):pass权限、频率、jwt的源码 MBV和CBV各有各的特点都有应用 CBV特点 能够直接根据请求方式的不同直接匹配到对应的方法执行 (3)小结
选择使用 FBV 还是 CBV 取决于具体的需求和个人偏好。FBV 相对简单直观适合编写简单的视图逻辑而 CBV 可以通过继承和重写类来实现代码复用和可扩展性适用于复杂的视图处理场景。在实际开发中可以根据需求选择适合的方式来编写视图处理函数或类。