视图层,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/<path:year>', 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/<yyy:year>', 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('<h1>Hello World</h1>')
    
  • 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()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,718评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,683评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,207评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,755评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,862评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,050评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,136评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,882评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,330评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,651评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,789评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,477评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,135评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,864评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,099评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,598评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,697评论 2 351