从哪里可以导入webapp2响应类?

时间:2015-04-15 18:38:58

标签: python python-2.7 google-app-engine

我的IDE PyCharm在以下代码中抱怨变量response,并且即使代码正常工作,它也被标记为红色作为未解析的引用。我想解决它,我想问题是我没有导入响应类。我该怎么做?它应该从哪里导入?

class Base2Handler(BaseRequestHandler):
    @webapp2.cached_property
    def jinja2(self):
        return jinja2.get_jinja2(app=self.app)

    facebook = None
    #user = None
    csrf_protect = True

    def render_template(self, file, template_args):
        path = os.path.join(os.path.dirname(__file__), 'templates',
                            file)
        self.response.out.write(template.render(path, template_args))

    def render_json(self, response):
        self.response.write("%s(%s);" % (self.request.GET['callback'],
                                         json.dumps(response)))

    def dispatch(self):

        # Get a session store for this request.
        self.session_store = sessions.get_store(request=self.request)
        if self.request.host.find('.br') > 0:  # for a Brazilian domain that uses Portuguese
            i18n.get_i18n().set_locale('pt-br')
        else:
            lang_code = self.session.get('HTTP_ACCEPT_LANGUAGE', None)
            if not lang_code:
                lang_code = os.environ.get('HTTP_ACCEPT_LANGUAGE')
            if lang_code:
                i18n.get_i18n().set_locale(lang_code)
            lang_code_get = self.request.get('hl', None)
            if lang_code_get:
                self.session['HTTP_ACCEPT_LANGUAGE'] = lang_code_get
                i18n.get_i18n().set_locale(lang_code_get)
        try:
            # Dispatch the request.
            webapp2.RequestHandler.dispatch(self)
        finally:
            # Save all sessions.
            self.session_store.save_sessions(self.response)

    @webapp2.cached_property
    def session(self):
        # Returns a session using the default cookie key.
        return self.session_store.get_session()

    @property
    def current_email(self):
        if not hasattr(self, '_current_email'):
            self._current_email = None
            host = self.request.host
            if host.find('.br') > 0:
                email = 'Montao.com.br <info@montao.com.br>'
            else:
                email = 'Kool Business <info@koolbusiness.com>'

            self._current_email = email
        return self._current_email

    @property
    def current_host(self):
        if not hasattr(self, '_current_host'):
            self._current_host = self.request.host
        return self._current_host

    @property
    def current_logo(self):
        if not hasattr(self, '_current_logo'):
            self._current_logo = self.request.host.replace('www', '')
        return self._current_logo

    def initialize(self, request, response):
        """General initialization for every request"""
        super(Base2Handler, self).initialize(request, response)
        try:
            self.init_csrf()
            self.response.headers['P3P'] = 'CP=HONK'  # iframe cookies in IE
            # Decide the language
            if self.request.host.find('montao.com.br') > 0:
                i18n.get_i18n().set_locale('pt-br')
            elif self.request.host.find('gralumo.com') > 0:
                i18n.get_i18n().set_locale('es-ar')
        except Exception, ex:
            self.log_exception(ex)
            raise

    def handle_exception(self, ex, debug_mode):
        """Invoked for unhandled exceptions by webapp"""
        self.log_exception(ex)
        self.render('error', trace=traceback.format_exc(),
                    debug_mode=debug_mode)

    def log_exception(self, ex):
        """Internal logging handler to reduce some App Engine noise in errors"""
        msg = (str(ex) or ex.__class__.__name__) + ': \n' \
              + traceback.format_exc()
        if isinstance(ex, urlfetch.DownloadError) or isinstance(ex,
                                                                CsrfException) or isinstance(ex,
                                                                                             taskqueue.TransientError):
            logging.warn(msg)
        else:
            logging.error(msg)

    def set_cookie(
            self,
            name,
            value,
            expires=None,
            ):

        if value is None:
            value = 'deleted'
            expires = datetime.timedelta(minutes=-50000)
        jar = Cookie.SimpleCookie()
        jar[name] = value
        jar[name]['path'] = '/'
        if expires:
            if isinstance(expires, datetime.timedelta):
                expires = datetime.datetime.now() + expires
            if isinstance(expires, datetime.datetime):
                expires = expires.strftime('%a, %d %b %Y %H:%M:%S')
            jar[name]['expires'] = expires
        self.response.headers.add_header(*jar.output().split(': ', 1))

    def set_webapp2_cookie(
            self,
            name,
            value,
            expires=None,
            ):

        if value is None:
            self.response.delete_cookie(name)
        if expires:
            if isinstance(expires, datetime.timedelta):
                expires = datetime.datetime.now() + expires
            if isinstance(expires, datetime.datetime):
                expires = expires.strftime('%a, %d %b %Y %H:%M:%S')
        response.set_cookie(
            name,
            value,
            max_age=expires,
            path='/',
            domain=self.request.host.replace('www', ''),
            secure=True,
            )

    def render_jinja(self, name,
                     **data):  # if we put two stars in front of the dictionary when calling the function, the dictionary is transformed into named arguments

        logo_url = '/_/img/kool_business.png'
        if self.request.host.find('.br') > 0:
            logo_url = '/_/img/montao_small.gif'

        if not data:
            data = {}

        data['logged_in_user'] = self.current_user
        data['message'] = self.get_message()
        data['csrf_token'] = self.csrf_token
        data['user'] = self.current_user  #users.get_current_user()
        #user = users.get_current_user()
        host = self.request.host
        data['host'] = host
        data['logo'] = host.replace('www.', '').capitalize()
        data['user_url'] = \
            (users.create_logout_url(self.request.uri) if users.get_current_user() else users.create_login_url(
                self.request.uri))
        data['request'] = self.request
        data['logo_url'] = logo_url
        data['admin'] = users.is_current_user_admin()
        self.response.write(self.jinja2.render_template(name + '.html',
                                                        **data))

    def render(self, name, **data):

        logo = 'Koolbusiness.com'
        logo_url = '/_/img/kool_business.png'
        domain = 'koolbusiness'
        if not data:
            data = {}
        data['message'] = self.get_message()
        data['csrf_token'] = self.csrf_token
        data['user'] = users.get_current_user()
        data['login_url'] = users.create_login_url(self.request.uri)
        host = self.request.host
        data['host'] = host
        if host.find('.br') > 0:
            logo_url = '/_/img/montao_small.gif'

        data['logo'] = logo
        data['logo_url'] = logo_url
        data['user_url'] = \
            (users.create_logout_url(self.request.uri) if users.get_current_user() else users.create_login_url(
                self.request.uri))
        data['admin'] = users.is_current_user_admin()

        self.response.out.write(template.render(os.path.join(os.path.dirname(__file__),
                                                             'templates', name + '.html'), data))

    def init_csrf(self):
        """Issue and handle CSRF token as necessary"""

        self.csrf_token = self.request.cookies.get('c')
        if not self.csrf_token:
            self.csrf_token = str(uuid4())[:8]
            self.set_cookie('c', self.csrf_token)

            # if self.request.method == 'POST' and self.csrf_protect \
            #    and self.csrf_token != self.request.get('_csrf_token'):
            #    raise CsrfException('Missing or invalid CSRF token.')

    def set_message(self, **obj):
        """Simple message support"""
        self.set_cookie('m',
                        (base64.b64encode(json.dumps(obj)) if obj else None))

    def get_message(self):
        """Get and clear the current message"""
        message = self.request.cookies.get('m')
        if message:
            self.set_message()  # clear the current cookie
            return json.loads(base64.b64decode(message))

1 个答案:

答案 0 :(得分:3)

右侧滚动条上的红色凹槽可以让您靠近,您应该会看到带有红色下划线的违规代码。编辑器光标位于带下划线的文本 Ctrl + 1 为您提供详细信息。

更好的是:代码 - &gt; Inspect Code应该准确显示投诉的内容。

想念'自我'。在set_webapp2_cookie()中可能吗?

    response.set_cookie(