对于Flask感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解'application'与Flask,并且为您提供关于angularjs–controller:ctrlfmt糟糕的控制器字符
对于Flask感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解'application'与Flask,并且为您提供关于angularjs – controller:ctrlfmt糟糕的控制器字符串”.必须匹配`__name__ as __id__`或`__name__`、app = Flask(__name__) 是个什么东西、Flash 之ANE的applicationDeployment.nativeLibrary ...、Flask 上下文以及 python__setattr__常见问题的宝贵知识。
本文目录一览:- Flask('application')与Flask(__ name__)
- angularjs – controller:ctrlfmt糟糕的控制器字符串”.必须匹配`__name__ as __id__`或`__name__`
- app = Flask(__name__) 是个什么东西
- Flash 之ANE的applicationDeployment.nativeLibrary ...
- Flask 上下文以及 python__setattr__常见问题
Flask('application')与Flask(__ name__)
在官方的快速入门中,建议__name__
在使用单个 模块 时使用:
2.
…如果您使用的是单个模块(如本例所示),则应使用,__name__
因为取决于它是作为应用程序启动还是作为模块导入,其名称将有所不同(''__main__''
与实际导入名称不同)。…
但是,在他们的API文档中,当我的应用程序为 软件包 时,建议进行硬编码:
因此,您在此处提供的内容很重要。如果使用单个模块,
__name__
则始终为正确的值。但是,如果您使用的是包,通常建议在其中硬编码包的名称。
我能理解为什么硬编码包名更好,但是为什么不硬编码单个模块名呢?或者,换句话说,Flask
当它收到__main__
第一个参数时可以得到什么信息?我看不到这如何使Flask更容易找到资源…
答案1
小编典典__name__
只是获取应用定义位置的导入名称的便捷方法。Flask使用导入名称来知道在哪里查找资源,模板,静态文件,实例文件夹等。使用包时,如果在其中定义应用程序,__init__.py
则__name__
仍然会指向相对于资源所在的“正确”位置是。但是,如果您在其他地方定义它(例如)mypackage/app.py
,则using__name__
将告诉Flask寻找相对于mypackage.app
而不是的资源mypackage
。
使用__name__
与“硬编码”不正交,它只是使用包名称的捷径。而且也没有理由说名称 应该 是基本包,这完全取决于您的项目结构。
angularjs – controller:ctrlfmt糟糕的控制器字符串”.必须匹配`__name__ as __id__`或`__name__`
.state('main.mydata',{ url: '/my-data',templateUrl: '/app/views/pages/my-data.html',controller: 'mydataCtrl' })
调节器
.controller('mydataCtrl',['$scope','$state','$http',function($scope,$state,$http) { console.log("Came to My Data") }])
当我在控制台中调用页面时出错
Error: angular.js?bundleVirtualPath=~%2fbundles%2fangular:13708 [$controller:ctrlfmt] Badly formed controller string ''. Must match `__name__ as __id__` or `__name__`. http://errors.angularjs.org/1.5.7/$controller/ctrlfmt?p0= at http://localhost:25282/Scripts/angular.js?bundleVirtualPath=%7eNaNbundles%fangular:68:12 at $controller (http://localhost:25282/Scripts/angular.js?bundleVirtualPath=%7e%fbundles%fangular:10199:17) at setupControllers (http://localhost:25282/Scripts/angular.js?bundleVirtualPath=%7e%fbundles%fangular:9331:34) at nodeLinkFn (http://localhost:25282/Scripts/angular.js?bundleVirtualPath=%7e%fbundles%fangular:9116:32) at compositeLinkFn (http://localhost:25282/Scripts/angular.js?bundleVirtualPath=%7e%fbundles%fangular:8510:13) at nodeLinkFn (http://localhost:25282/Scripts/angular.js?bundleVirtualPath=%7e%fbundles%fangular:9210:24) at compositeLinkFn (http://localhost:25282/Scripts/angular.js?bundleVirtualPath=%7e%fbundles%fangular:8510:13) at compositeLinkFn (http://localhost:25282/Scripts/angular.js?bundleVirtualPath=%7e%fbundles%fangular:8513:13) at compositeLinkFn (http://localhost:25282/Scripts/angular.js?bundleVirtualPath=%7e%fbundles%fangular:8513:13) at publicLinkFn (http://localhost:25282/Scripts/angular.js?bundleVirtualPath=%7e%fbundles%fangular:8390:30)
可能是什么问题?
解决方法
my-data.html
div有空控制器名称
<div ng-controller=""> .. </div>
因为它显示了
Badly formed controller
app = Flask(__name__) 是个什么东西
"""第一部分,初始化:所有的Flask都必须创建程序实例,
web服务器使用wsgi协议,把客户端所有的请求都转发给这个程序实例
程序实例是Flask的对象,一般情况下用如下方法实例化
Flask类只有一个必须指定的参数,即程序主模块或者包的名字,__name__是系统变量,该变量指的是本py文件的文件名"""
from flask import Flask
app = Flask(__name__)
# 第二部分,路由和视图函数:
# 客户端发送url给web服务器,web服务器将url转发给flask程序实例,程序实例
# 需要知道对于每一个url请求启动那一部分代码,所以保存了一个url和python函数的映射关系。
# 处理url和函数之间关系的程序,称为路由
# 在flask中,定义路由最简便的方式,是使用程序实例的app.route装饰器,把装饰的函数注册为路由
@app.route(''/'')
def hello_world():
return __name__
# 第三部分:程序实例用run方法启动flask集成的开发web服务器
# __name__ == ''__main__''是python常用的方法,表示只有直接启动本脚本时候,才用app.run方法
# 如果是其他脚本调用本脚本,程序假定父级脚本会启用不同的服务器,因此不用执行app.run()
# 服务器启动后,会启动轮询,等待并处理请求。轮询会一直请求,直到程序停止。
if __name__ == ''__main__'':
print(''dd'',__name__)
app.run()
- 如上述代码所示,app是flask的实例,功能就是接受来自web服务器的请求,
- 浏览器将请求给web服务器,web服务器将请求给app ,
- app收到请求,通过路由找到对应的视图函数,然后将请求处理,得到一个响应response
- 然后app将响应返回给web服务器,
- web服务器返回给浏览器,
- 浏览器展示给用户观看,流程完毕。
Flash 之ANE的applicationDeployment.nativeLibrary ...
项目介绍:Flash调用Android(采用ANE)
问题:今天在做整合三方支付的时候发现如下问题,
D:\project\flash\Xxxx-lib-d\src\extension.xml(25): error 105: extension.platforms.platform.applicationDeployment.nativeLibrary contains an invalid value
查到
<extension xmlns="http://ns.adobe.com/air/extension/3.1">
<id>com.aaa.xxxx.d</id>
<versionNumber>1</versionNumber>
<platforms>
<platform name="Android-ARM">
<applicationDeployment> <nativeLibrary>xxxx_d.jar</nativeLibrary> <initializer>com.aaa.xxxx.d.XxxxExtension</initializer>
<finalizer>com.aaa.xxxx.d.XxxxExtension</finalizer>
</applicationDeployment>
</platform>
</platforms>
</extension>
问题在下面一行
<nativeLibrary>xxxx_d.jar</nativeLibrary>
由于jar包的名称包含“_”,直接修改包名,去掉下划线
<extension xmlns="http://ns.adobe.com/air/extension/3.1">
<id>com.aaa.xxxx.d</id>
<versionNumber>1</versionNumber>
<platforms>
<platform name="Android-ARM">
<applicationDeployment> <nativeLibrary>xxxxd.jar</nativeLibrary> <initializer>com.aaa.xxxx.d.XxxxExtension</initializer>
<finalizer>com.aaa.xxxx.d.XxxxExtension</finalizer>
</applicationDeployment>
</platform>
</platforms>
</extension>
Flask 上下文以及 python__setattr__常见问题
1 import threading
2 local_values = threading.local()
3
4 ''''''
5 local_values = threading.local()就是起到一个锁的作用,每个线程都可以对threading.local对象进行读写,且互相不干扰。
6 用于为每个线程开辟一块空间来保存它独有的值。
7 ''''''
8 def func(num):
9 local_values.name=num
10 import time
11 time.sleep(1)
12 print(local_values.name,threading.current_thread().name)
13
14 for i in range(10):
15 th = threading.Thread(target=func,args=(i,),name="线程是%s"%i)
16 th.start()
1 import threading
2 from _thread import get_ident
3 ''''''获取线程唯一标示''''''
4 class LOCAL(object):
5 ''''''
6 通过自定义的方式实现threadlocal的功能
7 初始化的时候定义一个字典以及线程唯一标示
8 然后通过set设置k,v,再用get取值
9 ''''''
10 def __init__(self):
11 self.storage = {}
12 self.get_ident = get_ident
13 def set(self,k,v):
14 ident = self.get_ident()
15 origin = self.storage.get(ident)
16 if not origin:
17 origin = {k:v}
18 else:
19 origin[k] = v
20 self.storage[ident] = origin
21 def get(self,k):
22 ident = self.get_ident()
23 origin = self.storage.get(ident)
24 if not origin:
25 return None
26 return origin.get(k,None)
27
28 local_values = LOCAL()
29 def task(num):
30 local_values.set(''name'',num)
31 import time
32 time.sleep(1)
33 print(local_values.get(''name''), threading.current_thread().name)
34 for i in range(10):
35 th = threading.Thread(target=task,args=(i,),name="线程是%s"%i)
36 th.start()
1 import threading
2 from greenlet import getcurrent as get_ident
3 ''''''获取协程唯一标示,需要安装gevent,同时自动安装greenlet,通过
4 from greenlet import getcurrent 模块判断协程唯一标示,其他代码不变''''''
5 class LOCAL(object):
6 ''''''
7 通过自定义的方式实现threadlocal的功能
8 初始化的时候定义一个字典以及线程唯一标示
9 然后通过set设置k,v,再用get取值
10 ''''''
11 def __init__(self):
12 self.storage = {}
13 self.get_ident = get_ident
14 def set(self,k,v):
15 ident = self.get_ident()
16 origin = self.storage.get(ident)
17 if not origin:
18 origin = {k:v}
19 else:
20 origin[k] = v
21 self.storage[ident] = origin
22 def get(self,k):
23 ident = self.get_ident()
24 origin = self.storage.get(ident)
25 if not origin:
26 return None
27 return origin.get(k,None)
28
29 local_values = LOCAL()
30 def task(num):
31 local_values.set(''name'',num)
32 import time
33 time.sleep(1)
34 print(local_values.get(''name''), threading.current_thread().name)
35 for i in range(10):
36 th = threading.Thread(target=task,args=(i,),name="线程是%s"%i)
37 th.start()
1 #扩展内容,__setattr__
2 class Foo(object):
3 def set(self,k,v):
4 pass
5 def __setattr__(self, key, value):
6 print(key,value)
7 pass
8
9 obj = Foo()
10 obj.set(''x'',123)
11 obj.x = 123 #用__setattr__比set函数要方便许多
12
13 #__setattr__方法常见的坑
14
15 class Foo(object):
16 def __init__(self):
17 self.storage = {}
18 def __setattr__(self, key, value):
19 self.storage={''k1'':''v1''}
20 print(key,value)
21 def __getattr__(self, item):
22 print(item)
23
24
25 obj = Foo()
26 obj.x = 123
27 ''''''
28 当初始化的时候,self.storage,对象调用storage就会自动执行__setattr__方法,
29 然后__setattr__方法里面又是对象调用属性,就会再执行setattr,这样就是无限递归了。
30 为了避免这个问题需要用下面这种方式实现:
31 ''''''
32 class Foo(object):
33 def __init__(self):
34 object.__setattr__(self,''storage'',{})
35
36 def __setattr__(self, key, value):
37 self.storage={''k1'':''v1''}
38 print(key,value)
39
40 def __getattr__(self, item):
41 print(item)
42 return "sdf"
43 obj = Foo()
44 #注意如果obj.x = 123就会触发__setattr__方法,还是会出现递归的问题。
1 #源码的实现方式:
2 import threading
3 try:
4 from greenlet import getcurrent as get_ident # 协程
5 except ImportError:
6 try:
7 from thread import get_ident
8 except ImportError:
9 from _thread import get_ident # 线程
10
11
12 class Local(object):
13
14 def __init__(self):
15 object.__setattr__(self, ''__storage__'', {})
16 object.__setattr__(self, ''__ident_func__'', get_ident)
17
18
19 def __getattr__(self, name):
20 try:
21 return self.__storage__[self.__ident_func__()][name]
22 except KeyError:
23 raise AttributeError(name)
24
25 def __setattr__(self, name, value):
26 ident = self.__ident_func__()
27 storage = self.__storage__
28 try:
29 storage[ident][name] = value
30 except KeyError:
31 storage[ident] = {name: value}
32
33 def __delattr__(self, name):
34 try:
35 del self.__storage__[self.__ident_func__()][name]
36 except KeyError:
37 raise AttributeError(name)
38
39
40 local_values = Local()
41
42
43 def task(num):
44 local_values.name = num
45 import time
46 time.sleep(1)
47 print(local_values.name, threading.current_thread().name)
48
49
50 for i in range(20):
51 th = threading.Thread(target=task, args=(i,),name=''线程%s'' % i)
52 th.start()
关于Flask和'application'与Flask的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于angularjs – controller:ctrlfmt糟糕的控制器字符串”.必须匹配`__name__ as __id__`或`__name__`、app = Flask(__name__) 是个什么东西、Flash 之ANE的applicationDeployment.nativeLibrary ...、Flask 上下文以及 python__setattr__常见问题的相关知识,请在本站寻找。
本文标签: