VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > Python基础教程 >
  • python基础教程之Web框架之Django_03 路由层了解(路(2)



 

复制代码
首先在url路由层视图那里:
views.MyCls.as_view()
我们在源码中看到as_view()返回的是一个view的函数名,那么上面的可以写成:
views.view
也就是这样:
url(r'^mycls/',views.view)
也就是说变成了一个视图函数,所有接下来我们还得看看View类中的view方法的内容
当浏览器发出路由请求,匹配到前面的mycls就会调用后面的视图函数view(request)
复制代码

继续查看dispatch函数代码:


所以最好view(request)函数的调用最后变成了这样:MyCls类实例化对象self.post(request),我们再看看MyCls类的内容:

这里就实现了通过类视图,创建的相对于类来通过post和get(或者其它更多请求方式)来判断请求方式进行不同的操作,达到和函数视图方式一样的结果。
补充一个http请求方法列表:

http_method_names = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace']

至此基于类的视图实现过程分析完成,整个过程走下来,发现实现的目的和函数视图如出一辙,只不过用类来实现会多走基本路。条条道路通罗马,只有有想法,什么方法都是方法,能达到目的就行,๑乛◡乛๑

  • JsonResponse(将相应的数据自动转换成json格式,然后直接发送回浏览器)#

    复制代码
    导入模块
    from django.http import JsonResponse
    import json
    
    原始方法:
    def index(request):
        res = {'name':'sgt','password':18}
        return HttpResponse(json.dumps(res))
    
    JsonResponse方法:
    def index(request):
    return JsonResponse(
        {'name':'sgt','password':'1888888'},
        json_dumps_params={'ensure_ascii':False}
       )       
    
    注意:json_dumps_params={'ensure_ascii':False}这个的作用是,将Django默认转码功能取消,这样就能显示汉字了。         
    复制代码
  • 文件上传
    实现过程:
    前端:
    复制代码
    <body>
    <h1>index</h1>
    <form action="" method="post" enctype="multipart/form-data">
        <input type="file" name="my_file">
        <input type="submit">
    </form>
    </body>
    复制代码

    前端需要注意的点:
    1.method需要指定成post
    2.enctype需要改为multipart/form-data格式
    后端:

    复制代码
    def index(request):
        if request.method == 'POST':    
            file_obj = request.FILES.get('my_file')
                print(file_obj.name)
                with open(file_obj.name,'wb') as f:
                    for line in file_obj.chunks():
                        f.write(line)
            return HttpResponse('成功')
        return render(request, 'index.html')
    复制代码

    后端需要注意:
    1.配置文件中注释掉csrfmiddleware
    2.通过request.FILES获取用户上传的post文件数据

    补充:request中有很多属性,这里说说里面的2个属性:path和full_path的区别:

    复制代码
    def login(request):
        print('path:',request.path)
        print('full_path:',request.get_full_path())
        if request.method == 'POST':
            return HttpResponse('登录成功')
        return render(request, 'login.html')
            
        path: /login/
        full_path: /login/?name=jason   如果路由后面有拼接字符串,会显示
    复制代码

     

  • 作者: suguangti

    出处:https://www.cnblogs.com/suguangti/p/10999128.html

    版权:本站使用「CC BY 4.0」创作共享协议,转载请在文章明显位置注明作者及出处。


    
    相关教程
    关于我们--广告服务--免责声明--本站帮助-友情链接--版权声明--联系我们       黑ICP备07002182号