用于处理用户代理的wsgi中间件和web框架扩展。

uadetector的Python项目详细描述


用于处理用户代理的wsgi中间件和web框架扩展。由于woothee,uadetector支持各种用户代理。这个库尊重k0kubun/rack-user_agent

traviscoveralls.iolatest versionlicense

安装

$ pip install uadetector

用法

wsgi中间件

这个中间件提供了一个uadetector.useragent.UserAgent对象来处理用户代理。

fromwsgiref.simple_serverimportmake_server# import middlewarefromuadetectorimportUADetectordefapp(environ,start_response):start_response('200 OK',[('Content-Type','text/plain')])# get 'UserAgent' object from environ dict.ua=environ.get('uadetector.useragent')ua.user_agent#=> "Mozilla/5.0 (Macintosh; ..."ua.device_type#=> "pc"ua.os#=> "Mac OSX"ua.browser#=> "Chrome"ua.from_pc#=> Trueua.from_smartphone#=> Falsereturn[ua.os.encode('utf-8')]# Apply middlewareapplication=UADetector(app)if__name__=="__main__":withmake_server('127.0.0.1',8000,application)asserver:print("Serving on port 8000...")server.serve_forever()

您还可以替换environUserAgent类的键。

fromuadetector.useragentimportUserAgentclassMyUserAgent(UserAgent):# Write your custom codes.# Apply middlewareapplication=UADetector(app,envorion_key='your.favorite.key'useragent_class='path.to.MyUserAgent')

另请参见WSGI example

web框架扩展

一些web框架提供了一种不同于wsgi中间件的扩展方式。这个库按这种方式提供快捷方式。

警告:我不积极支持单个框架。如果您担心,应该使用wsgimiddleware。

django

您可以使用django的MIDDLEWARE

# settings.pyMIDDLEWARE=[# Add UADetecorMiddleware'uadetector.django.middleware.UADetectorMiddleware',# ... omit ...]
# views.pydefindex_view(request):print(request.ua.from_smartphone)# => True or False# ... omit ...

自定义请求对象的属性名并替换useragent类。

# settings.pyUADETECTOR_REQUEST_PROPERTY_NAME='agent'# => You can use "request.agent"UADETECTOR_USERAGENT_CLASS='path.to.MyUserAgent'

另请参见Dajngo example

提示:Switch templates based on User-Agent(使用django-variantmpl)。

棱锥体

您可以使用config.add_request_method

fromuadetector.pyramidimportua_propdefindex(request):print(request.ua.from_smartphone)# => True or False# ... omit ...withConfigurator()asconfig:config.add_route('index','/')config.add_view(index,route_name='index')config.add_request_method(ua_prop(),name='ua',reify=True)# ... omit ...

自定义请求对象的属性名并替换useragent类。

config.add_request_method(ua_prop('path.to.MyUserAgent'),name='agent',# => You can use "request.agent"reify=True)

另请参见Pyramid example

烧瓶

您可以使用Flask Extension

fromflaskimportFlask,requestfromuadetector.flaskimportUADetectorapp=Flask(__name__)UADetector(app)@app.route('/')defindex():print(request.ua.from_smartphone)# => True or False# ... omit ...

自定义请求对象的属性名并替换useragent类。

app=Flask(__name__)app.config['UADETECTOR_USERAGENT_CLASS']='path.to.MyUserAgent'app.config['UADETECTOR_REQUEST_PROPERTY_NAME']='agent'# => You can use "request.agent"UADetector(app)

另请参见Flask example

龙卷风

您可以使用自定义RequestHandler

fromuadetector.tornado.webimportRequestHandlerclassIndexHandler(RequestHandler):defget(self):print(self.request.ua.from_smartphone)# => True or False# ... omit ...

自定义请求对象的属性名并替换useragent类。

fromtornado.optionsimportdefinefromuadetector.tornado.webimportRequestHandlerdefine('uadetector_request_property_name',default='agent',# => You can use "self.request.agent")define('uadetector_useragent_class',default='path.to.MyUserAgent')classIndexHandler(RequestHandler):

另请参见Tornado example

用户代理

uadetector.useragent.UserAgent对象的属性列表。

属性

  • useragent.device_变量
  • useragent.device_type
  • useragent.os
  • useragent.os_版本
  • useragent.browser
  • useragent.browser_版本
  • useragent.browser_供应商

助手

  • 来自PC的用户代理
  • 来自智能手机的useragent.
  • 用户代理。来自移动电话
  • useragent.from_设备
  • 来自爬虫程序的useragent.

探测器

  • useragent.smartphone_版本
  • useragent.from_iphone
  • useragent.from_ipad
  • useragent.from_ipod
  • 来自安卓系统的useragent.
  • 来自安卓平板电脑的useragent.
  • useragent.from_windows_phone
  • useragent.from_ios
  • android操作系统中的useragent.

提示

如果您只想从用户代理字符串获得一个UserAgent对象,请使用get_useruseragent

fromuadetectorimportget_useragentua_string="Mozilla/5.0 (iPhone; CPU iPhone OS ..."ua=get_useragent(ua_string)us.from_smartphone# => True# Use custom useragent classua=get_useragent(ua_string,useragent_class='path.to.MyUserAgent')

支架

支持最新的3个小版本。

  • Python3.4、3.5、3.6
  • Django 1.10、1.11、2.0
  • 金字塔1.7、1.8、1.9
  • 烧瓶0.10、0.11、0.12
  • 龙卷风4.5、4.6、4.7

许可证

麻省理工学院许可证

作者

  • 在gmail.com上告诉k<;ffk2005>;

历史记录

0.1.3(2018年2月20日)

0.1.2(2018年2月19日)

  • 首次发布

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
带有字符串的java JNA调用与带有字节[]的java JNA调用的行为不同   java基于键列表获取子映射   重启后永久增加java堆大小?   JavaHTTPS服务器:相互SSL身份验证   java为什么接受接口的方法会拒绝该接口的实现?   片段中的java视图无法应用于()   ms access Java SQL更新命令不工作   java将web服务自动打包和部署到Oracle Application Server 10g   java有没有办法在安卓 studio中为安卓时钟设置多个警报?   位于FTP服务器上的文件上的Java校验和md5   在Java中创建类时遇到问题。有些方法不太确定   java错误:在类chrome\u驱动程序中找不到主方法   通用海图(Javascript\Java)