计算机基础知识52

三板斧的使用

计算机基础知识52_第1张图片

HttpResponse: 字符串
render: 渲染html页面
redirect: 重定向的

# 在视图文件中写视图函数的时候不能没有返回值了,默认返回的是None,页面上就会报错

def render(request, template_name, context=None, content_type=None, status=None, using=None):
    content = loader.render_to_string(template_name, context, request, using=using)
    return HttpResponse(content, content_type, status)

JsonReponse序列化类的使用

# json有什么用:跨语言传输       

        序列化: json.dumps      反序列化: json.loads

#  向前端返回一个json格式字符串的两种方式

方式一:

import json
 
def my_view(request):
    data=['egon','kevin']
    return HttpResponse(json.dumps(data) )

方式二:

from django.http import JsonResponse
 
def my_view(request):
    data=['egon','kevin']
    return JsonResponse(data,safe=False)
    #默认safe=True代表只能序列化字典对象,safe=False代表可以序列化字典以外的对象

form表单上传文件

表单上传数据需要满足的条件:

        1. 请求方式必须是post

        2. enctype="multipart/form-data"




    
    Title
    
    
    



    
    


3、request对象方法:

                request.method

                request.POST.get()

                request.POST.getlist()

                request.GET.get()

                request.GET.getlist()

                request.FILES

                request.path

                request.path_info    # 不能接收参数,接收的是后缀

                request.get_full_path()     # 也能够接收参数

print(request.POST) # 接收的都是普通的数据,非文件数据
print(request.FILES) # 只接受文件数据,普通数据还在request.POST里面
def index(request):
    # user_dict = {'username':'kevin你好'}
    user_dict = [1, 2, 3, 4]
    print(request.POST)
    # ]}>
    file_obj=request.FILES.get('myfile')
    # 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/?a=1&b=2
    print(request.GET.get(''))
    return render(request,'index.html')

CBV的写法

# 视图是可调用的,用来处理请求(request)并且返回响应(response),django的视图有两种形式:FBV和CBV

# FBV: function based view # 写的都是函数

         FBV中视图函数处理HTTP的GET请求如下:

from django.http import HttpResponse
 
def my_view(request):
    if request.method == 'GET':
        # 
        return HttpResponse('GET result')
    elif request.method == 'POST':
        # 
        return HttpResponse('POST result')

CBV: class based view # 写的都是类

        CBV的实现如下:

from django.http import HttpResponse
from django.views import View
 
class Login(View):
    def get(self, request):
        # 
        return HttpResponse('GET result')
 
    def post(self, request):
        # 
        return HttpResponse('POST result')

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类里的dispatch

def 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_allowed
    return handler(request, *args, **kwargs)

from django.views import View


class 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的源码

模板层之模板变量

# PHP:不是后端语言,前端 操作数据量,写逻辑,都可以

        在html页面中写一个python的代码
# 在模板中取值的时候,使用的是点语法(.)

# 在模板中得函数调用的时候不要加括号,自动加括号,只需写函数名

{{ 写变量 }}
{% 写逻辑 %}

{{ d.0 }}
{{ d.1 }}
{{ d.3 }}
{{ user_dict.hobby.2 }}
{{ index }}
{{ obj.score }}

今日思维导图:

你可能感兴趣的:(前端,django,python)