Python flask.request 模块,user_agent() 实例源码
我们从Python开源项目中,提取了以下11个代码示例,用于说明如何使用flask.request.user_agent()。
def create_session(data):
user = User.find_by_email_or_username(data['username'])
if not (user and user.password == data['password']):
return make_error_response('Invalid username/password combination', 401)
session = Session(user=user)
# TODO can this be made more accurate?
session.ip_address = request.remote_addr
if request.user_agent:
session.user_agent = request.user_agent.string
# Denormalize user agent
session.platform = request.user_agent.platform
session.browser = request.user_agent.browser
db.session.add(session)
db.session.commit()
return session
def ip_whitelist_add(ip_to_allow, info_record_dict=None):
"""??ip????, ?????"""
if ip_to_allow in single_ip_allowed_set:
return
dbgprint('ip white added', ip_to_allow, 'info:', info_record_dict)
single_ip_allowed_set.add(ip_to_allow)
is_ip_not_in_allow_range.cache_clear()
append_ip_whitelist_file(ip_to_allow)
# dbgprint(single_ip_allowed_set)
try:
with open(zmirror_root(human_ip_verification_whitelist_log), 'a', encoding='utf-8') as fp:
fp.write(datetime.now().strftime('%Y-%m-%d %H:%M:%S') + " " + ip_to_allow
+ " " + str(request.user_agent)
+ " " + repr(info_record_dict) + "\n")
except: # coverage: exclude
errprint('Unable to write log file', os.path.abspath(human_ip_verification_whitelist_log))
traceback.print_exc()
def _is_msie8or9():
"""Returns ``True`` if and only if the user agent of the client making the
request indicates that it is Microsoft Internet Explorer 8 or 9.
.. note::
We have no way of knowing if the user agent is lying, so we just make
our best guess based on the information provided.
"""
# request.user_agent.version comes as a string, so we have to parse it
version = lambda ua: tuple(int(d) for d in ua.version.split('.'))
return (request.user_agent is not None
and request.user_agent.version is not None
and request.user_agent.browser == 'msie'
and (8, 0) <= version(request.user_agent) < (10, 0))
def dist_index(dist):
netbsd_logo_url = url_for('static', filename='images/netbsd.png')
if dist is None or dist == '':
dist = 'NetBSD-current'
if dist not in config.DB_PATHS and dist != 'favicon.ico':
return redirect(url_for('search'))
ip = request.remote_addr
user_agent = request.user_agent
platform = user_agent.platform
browser = user_agent.browser
version = user_agent.version
language = user_agent.language
referrer = request.referrer
dblogger.log_page_visit(1, ip, platform, browser, version, language, referrer,
int(time.time()), user_agent.string, dist)
return render_template('index.html',
netbsd_logo_url=netbsd_logo_url, distnames=distnames)
def is_from_browser(user_agent):
return user_agent.browser in [
"camino",
"chrome",
"firefox",
"galeon",
"kmeleon",
"konqueror",
"links",
"lynx",
"msie",
"msn",
"netscape",
"opera",
"safari",
"seamonkey",
"webkit"
]
def get(self):
try:
current_token = get_raw_jwt()
jti = current_token['jti']
auth_service.revoke_tokens(app, jti)
identity_changed.send(
current_app._get_current_object(),
identity=AnonymousIdentity()
)
except KeyError:
return {
"Access token not found."
}, 500
logout_data = {
"logout": True
}
if is_from_browser(request.user_agent):
response = jsonify(logout_data)
unset_jwt_cookies(response)
return response
else:
return logout_data
def get(self):
email = get_jwt_identity()
access_token = create_access_token(identity=email)
auth_service.register_tokens(app, access_token)
if is_from_browser(request.user_agent):
response = jsonify({'refresh': True})
set_access_cookies(response, access_token)
else:
return {
"access_token": access_token
}
def after_request(response):
timestamp = strftime('%Y-%b-%d %H:%M:%S')
useragent = request.user_agent
logger.info('[%s] [%s] [%s] [%s] [%s] [%s] [%s] [%s]',
timestamp, request.remote_addr, useragent, request.method,
request.scheme, request.full_path, response.status, request.referrer)
return response
def filter_client_request():
"""??????, ??????????
:rtype: Union[Response, None]
"""
dbgprint('Client Request Url: ', request.url)
# crossdomain.xml
if os.path.basename(request.path) == 'crossdomain.xml':
dbgprint('crossdomain.xml hit from', request.url)
return crossdomain_xml()
# Global whitelist ua
if check_global_ua_pass(str(request.user_agent)):
return None
if is_deny_spiders_by_403 and is_denied_because_of_spider(str(request.user_agent)):
return generate_simple_resp_page(b'Spiders Are Not Allowed To This Site', 403)
if human_ip_verification_enabled and (
((human_ip_verification_whitelist_from_cookies or enable_custom_access_cookie_generate_and_verify)
and must_verify_cookies)
or is_ip_not_in_allow_range(request.remote_addr)
):
dbgprint('ip', request.remote_addr, 'is verifying cookies')
if 'zmirror_verify' in request.cookies and \
((human_ip_verification_whitelist_from_cookies and verify_ip_hash_cookie(request.cookies.get('zmirror_verify')))
or (enable_custom_access_cookie_generate_and_verify and custom_verify_access_cookie(
request.cookies.get('zmirror_verify'), request))):
ip_whitelist_add(request.remote_addr, info_record_dict=request.cookies.get('zmirror_verify'))
dbgprint('add to ip_whitelist because cookies:', request.remote_addr)
else:
return redirect(
"/ip_ban_verify_page?origin=" + base64.urlsafe_b64encode(str(request.url).encode(encoding='utf-8')).decode(
encoding='utf-8'),
code=302)
return None
def create_app(config_name):
if config_name not in app_config:
raise ConfigError("{} is a wrong config name.".format(config_name))
app = Flask(__name__)
app.config.from_object(app_config[config_name])
from app.user import user_blueprint
from app.information import info_blueprint
from app.view import view_blueprint
app.register_blueprint(user_blueprint)
app.register_blueprint(info_blueprint)
app.register_blueprint(view_blueprint)
from app.extensions import display_plan_type, display_play, display_user, tracer_config
jinja_env = app.jinja_env
jinja_env.filters['plan_type'] = display_plan_type
jinja_env.filters['plan_name'] = display_play
jinja_env.filters['user_type'] = display_user
db.init_app(app)
tool_bar.init_app(app)
login_manager.init_app(app)
admin.init_app(app)
if app.config.get("TRACER"):
tracer_config.initialize_tracer()
@app.before_request
def init_tracer():
import opentracing
from app.extensions import tracer_config
span = opentracing.tracer.start_span(str(request.url))
span.set_tag('user_agent', request.user_agent)
span.log_event("request args", payload=dict(args=request.args, form=request.form))
g.tracer_span = span
@app.after_request
def close_tracer(response):
if g.tracer_span:
g.tracer_span.finish()
return response
return app
def post(self):
(email, password) = self.get_arguments()
try:
user = auth_service.check_auth(app, email, password)
access_token = create_access_token(identity=user["email"])
refresh_token = create_refresh_token(identity=user["email"])
auth_service.register_tokens(app, access_token, refresh_token)
identity_changed.send(
current_app._get_current_object(),
identity=Identity(user["id"])
)
if is_from_browser(request.user_agent):
response = jsonify({
"user": user,
"login": True
})
set_access_cookies(response, access_token)
set_refresh_cookies(response, refresh_token)
else:
response = {
"login": True,
"user": user,
"access_token": access_token,
"refresh_token": refresh_token
}
return response
except PersonNotFoundException:
current_app.logger.info("User is not registered.")
return {"login": False}, 400
except WrongUserException:
current_app.logger.info("User is not registered.")
return {"login": False}, 400
except WrongPasswordException:
current_app.logger.info("User gave a wrong password.")
return {"login": False}, 400
except NoAuthStrategyConfigured:
current_app.logger.info(
"Authentication strategy is not properly configured."
)
return {"login": False}, 400
except UnactiveUserException:
return {
"error": True,
"message": "User is unactive, he cannot log in."
}, 400