$Django 虚拟环境,2.0、1.0路由层区别,Httprequest对象,视图层(fbv,cbv),文件上传

时间:2022-11-01 18:58:43
1 虚拟环境:解决问题同一台机器上可以运行不同版本的django,
  1 用pychanrm创建--->files-->newproject--->选择虚拟环境
  2 settings-->project创建
  3 用命令行创建,详见https://www.cnblogs.com/liuqingzheng/p/9508851.html
 2 django 2.0和django 1.0 路由层区别(*****url,re_path分组分出来的数据,是字符串)
  -re_path:跟1.0的url用法相同
  -path:传的路径,是准确路径
   5个转换器-->path('test/<path:year>', views.re_test),视图函数记得传参year
   str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
   int,匹配正整数,包含0。
   slug,匹配字母、数字以及横杠、下划线组成的字符串。
   uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
   path,匹配任何非空字符串,包含了路径分隔符(/)
  -自定义转换器
   1 定义:一个类:
    class MyCon:
     # 写一个正则表达式
     regex = '[0-9]{4}'
     # 匹配出來的数据,会传到这里,retrun回去的,会被视图函数接收
     def to_python(self, value):
      return int(value)
     # 反向解析用的
     def to_url(self, value):
      return '%04d' % value
   2注册: from django.urls import register_converter
     register_converter(MyCon,'yyy')
   3 使用:path('test/<yyy:year>', views.re_test,name='test'),
 2.1补充:
  # 为假,不会加反斜杠
  # APPEND_SLASH=False
 3 视图层之HttpRequest对象
  # 前台Post传过来的数据,包装到POST字典中
  # request.POST
  # 前台浏览器窗口里携带的数据,包装到GET字典中
  # request.GET
  # 前台请求的方式
  # request.method
  # post提交的数据,body(请求/响应)体的内容,前台会封装成:name=lqz&age=18&sex=1
  # request.body
  # 取出请求的路径,取不到数据部分
  # print(request.path)
  # 取出请求的路径,能取到数据部分
  # print(request.get_full_path())
  #请求/响应 头的东西
  # print(request.META)
 4 视图层之HttpResponse对象
  三件套:render,HttpResponse,redirect
  render函数:
   temp=Template('<h1>{{ user }}</h1>')
   con=Context({'user':'lqz'})
   ret=temp.render(con)
   print(ret)
   return HttpResponse(ret)
  
   # return render(request,'index.html')的内部
  
 5 视图层之JsonResponse对象
  -导入:from django.http import JsonResponse
  -视图函数中:
   def test(request):
    import json
    # dic={'name':'lqz','age':18}
    ll = ['name', 'age']
    # 把字典转换成json格式,返回到前台
    # return HttpResponse(json.dumps(dic))
    # 把列表转换成json格式,返回到前台
    # return HttpResponse(json.dumps(ll))
    # 把字典转换成json格式,返回到前台
    # return JsonResponse(dic)
    # 报错,默认不支持列表形式
    # return JsonResponse(ll)
    # 支持列表形式
    return JsonResponse(ll,safe=False)
 6 CBV和FBV
  -基于类的视图
   -1 路由层:url(r'^test/', views.Test.as_view()),
   -2 视图层
    -导入:from django.views import View
    -写一个类:
     class Test(View):
      def get(self, request):#一定要传request对象
       return HttpResponse('get-test')
      def post(self, request):
       return HttpResponse('post-test')
  -基于函数的视图   
  
 7 简单文件上传
  前端:
   <form action="" method="post" enctype="multipart/form-data">
   {#<form action="" method="post" enctype="application/x-www-form-urlencoded">#} 这两种一个是默认 一个是上传文件 都可以获取POST内的数据
    <input type="file" name="myfile">
    <input type="text" name="password">
    <input type="submit" value="提交">
   </form>
  后台:
   def fileupload(request):
    if request.method=='GET':
     return render(request,'fileupload.html')
    if request.method=='POST':
     # FILES
     print(request.FILES)
     print(type(request.FILES.get('myfile')))
     # 从字典里根据名字,把文件取出来
     myfile=request.FILES.get('myfile')
     from django.core.files.uploadedfile import InMemoryUploadedFile  这行是:查看源码用
     # 文件名字
     name=myfile.name
     # 打开文件,把上传过来的文件存到本地
     with open(name,'wb') as f:
      # for line in myfile.chunks():
      for line in myfile:
       f.write(line)
     return HttpResponse('ok')
 
  补充:*****编码方式multipart/form-data或者:application/x-www-form-urlencoded传的数据,都可以从POST中取出来

随机推荐

  1. 分享我用Qt开发的应用程序【一】,附绿色版下载,以后会慢慢公布源码

    写在前面: 1.第一版的代码还有些烂,等功能开发齐全了,做一次重构,再慢慢分享代码 2.邮箱功能.自动升级功能还没有做,笔记功能和备忘功能是好用的,大家如果不嫌弃,可以先用起来 3.笔记功能目前还不能 ...

  2. Windows Server 2016软件定义存储:Storage Spaces Direct的关键特性

    [TechTarget中国原创] 微软在Windows Server 2016 Technical Preview 2中引入了Storage Spaces Direct.这个特性将本地存储扩展为高可用 ...

  3. es6语法重构react代码

    1.使用React.Component创建组件,需要通过在constructor中调用super()将props传递给React.Component.另外react 0.13之后props必须是不可变 ...

  4. PhoneGap开发手机程序入门教程

    用PhoneGap开发手机移动程序 1.     什么是PhoneGap PhoneGap是一个*开放源码的开发工具和框架,允许利用HTML + JavaScript + CSS的强大功能在多个手机 ...

  5. JQuery Dialog 禁用X按钮关闭对话框,-摘自网络

    JQuery Dialog 禁用X按钮关闭对话框,禁用ESC键关闭代码如下:$("#div1").dialog({   closeOnEscape: false,   open: ...

  6. Linux网络编程&lpar;六&rpar;

    网络编程中,使用多路IO复用的典型场合: 1.当客户处理多个描述字时(交互式输入以及网络接口),必须使用IO复用. 2.一个客户同时处理多个套接口. 3.一个tcp服务程序既要处理监听套接口,又要处理 ...

  7. 《java入门第一季》之面向对象(匿名对象)

    /* 匿名对象:就是没有名字的对象. 匿名对象的应用场景: A:调用方法,仅仅只调用一次的时候. 注意:调用多次的时候,不适合. 匿名对象调用完毕就是垃圾.可以被垃圾回收器回收,释放了系统资源. B: ...

  8. hdu 2686&lpar;状压dp)

    题目链接:http://poj.org/problem?id=2686 思路:典型的状压dp题,dp[s][v]表示到达剩下的车票集合为S并且现在在城市v的状态所需要的最小的花费. #include& ...

  9. 分布式事务&lowbar;03&lowbar;2PC框架raincat源码解析-事务提交过程

    一.前言 前面两节,我们已经将raincat的demo工程启动,并简单分析了下事务协调者与事务参与者的启动过程. 这一节,我们来看下raincat的事务提交过程. 二.事务提交过程概览 1.二阶段对应 ...

  10. 网络编程 TCP学习

    上传txt文本 通过socket向服务端发送数据 然后用serversocket 接收socket 通过流读取数据保存 服务端在发送确认信息并在client输出 client import java. ...