视图层,django2.0的路由层,虚拟环境,右键运行测试文件

0. 基于django环境右键运行测试文件

import os

if __name__ == '__main__':
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day76orm.settings")
    import django

    django.setup()

后就可以右键运行这个单个py程序

1. 虚拟环境

  • 用Pycharm创建: ----> files-->newproject--->选择虚拟环境

...
  • settings-->project创建

  • 用命令行创建

    0. 安装
      pip3 install virtualenv
    1. cmd中cd到想安装的路径
    2. 创建虚拟环境
        virtualenv  env_django(创建纯净环境,env_django为名字)
        virtualenv --system-site-packages env_django(创建环境,继承原安装的模块)
    3. 激活该虚拟环境:
      -windows进到目录里,的Script文件夹输入:activate
      -linux:soruse env1/Script/activate
    4.退出虚拟环境:
      deactivate
    5. 在pycharm中使用虚拟环境
      files--settings--Project--Project Interpreter--add选择虚拟环境路径下的python.exe即可
    

2. django 2.0和django 1.0 路由层区别

  • re_path:跟1.0的url用法相同

    需要导入: from django.urls import path, re_path

  • path:传的路径,是准确路径

    path('test/', views.re_test,),

    path传的第一个参数,不是正则,准确的路径,不支持正则

    • 五种转换器 path('test/', views.re_test),
      str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
      int,匹配正整数,包含0。
      slug,匹配字母、数字以及横杠、下划线组成的字符串。
      uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
      path,匹配任何非空字符串,包含了路径分隔符(/)(不能用?)
      
    • 自定义转换器

      定义类 ,类名随意 ,但必须要有regex属性与to_pythonto_url方法

      注册register_converter(MyCon,'yyy')

      第一个参数为刚定义的类名 , 第二个参数是转换器的名字

      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 注册这个转换器 , 取名yyy:
          from django.urls import register_converter
          register_converter(MyCon,'yyy')
          
      3 使用yyy这个转换器
          path('test/', views.re_test,name='test')
      

2.1 浏览器自动添加 / 问题

在settings.py文件里设置APPEND_SLASH,为真自动添加,为假不添加

3. 视图层之request对象

request.POST
前台Post传过来的数据,包装到POST字典中

request.GET
前台浏览器窗口里携带的数据,包装到GET字典中

request.method
前台请求的方式

request.body
post提交的数据,body体的内容,前台会封装成:name=lqz&age=18&sex=1

request.path
取出请求的路径,取不到数据部分

request.get_full_path()
request.META
取出请求的路径,能取到数据部分

4. 视图层之HttpResponse对象

三件套:render,HttpResponse,redirect

  • render: 返回html页面及数据
    return render(request,'index.html',{'user':'lqz'})
    
  • HttpResponse: 返回字符串
    return HttpResponse('

    Hello World

    ')
  • redirect: 重定向
    return redirect('https:www.baidu.com')
    

5. 视图层之JsonResponse对象

  • 导入:from django.http import JsonResponse

  • 视图函数中:

    def test(request):
        import json
        dic={'name':'lqz','age':18}
        ll = ['name', 'age']
        
        使用原来的json
        把字典转换成json格式,返回到前台
        return HttpResponse(json.dumps(dic))
        把列表转换成json格式,返回到前台
        return HttpResponse(json.dumps(ll))
        
        使用JsonResponse
        把字典转换成json格式,返回到前台
        return JsonResponse(dic)
        报错,默认不支持列表形式
        return JsonResponse(ll)
        支持列表形式
        return JsonResponse(ll,safe=False)
    

6. CBV和FBV (class base view) (function base view)

  • CBV(class base view) 基于类的视图

    1.视图层 
      导入:from django.views import View
      写一个类:如果是get请求响应get函数 , 如果是post请求响应post函数
            class Test(View):
                def dispatch(self, request, *args, **kwargs):
                    print(request)
                    print(args)
                    print(kwargs)
                    # 可以写类似装饰器的东西,在前后加代码
                    obj=super().dispatch(request, *args, **kwargs)
                    return obj
    
                def get(self, request):#一定要传request对象
                    return HttpResponse('get-test')
    
                def post(self, request):
                    return HttpResponse('post-test')
    
    2. 路由层:url(r'^test/', views.Test.as_view()),      
    
  • FBV(function base view) 基于函数的视图

7. 右键运行测试文件

import os
if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "exam.settings")
    import django
    django.setup()

你可能感兴趣的:(视图层,django2.0的路由层,虚拟环境,右键运行测试文件)