int() argument must be a string, a bytes-like object or a number, not 'NoneType'
Request Method: | GET |
---|---|
Request URL: | http://www.bwbot.org/en/shop/gui/buy/?product=9&from=/ |
Django Version: | 2.2.28 |
Exception Type: | TypeError |
Exception Value: | int() argument must be a string, a bytes-like object or a number, not 'NoneType' |
Exception Location: | /home/bwbot/data/src/bwbot_web/bwbot_web/shop/views.py in buy_product, line 331 |
Python Executable: | /home/bwbot/data/src/bwbot_web/venv/bin/python |
Python Version: | 3.5.2 |
Python Path: | ['/home/bwbot/data/src/bwbot_web/bwbot_web', '/home/bwbot/data/src/bwbot_web/venv/lib/python35.zip', '/home/bwbot/data/src/bwbot_web/venv/lib/python3.5', '/home/bwbot/data/src/bwbot_web/venv/lib/python3.5/plat-x86_64-linux-gnu', '/home/bwbot/data/src/bwbot_web/venv/lib/python3.5/lib-dynload', '/usr/lib/python3.5', '/usr/lib/python3.5/plat-x86_64-linux-gnu', '/home/bwbot/data/src/bwbot_web/venv/lib/python3.5/site-packages'] |
Server time: | Thu, 28 Mar 2024 15:37:56 +0000 |
/home/bwbot/data/src/bwbot_web/venv/lib/python3.5/site-packages/django/core/handlers/exception.py
in inner
This decorator is automatically applied to all middleware to ensure that
no middleware leaks an exception and that the next middleware in the stack
can rely on getting a response instead of an exception.
"""
@wraps(get_response)
def inner(request):
try:
response = get_response(request)…
except Exception as exc:
response = response_for_exception(request, exc)
return response
return inner
Variable | Value |
---|---|
exc | TypeError("int() argument must be a string, a bytes-like object or a number, not 'NoneType'",) |
get_response | <bound method BaseHandler._get_response of <django.core.handlers.wsgi.WSGIHandler object at 0x7fb97f78ac18>> |
request | <WSGIRequest: GET '/en/shop/gui/buy/?product=9&from=/'> |
/home/bwbot/data/src/bwbot_web/venv/lib/python3.5/site-packages/django/core/handlers/base.py
in _get_response
break
if response is None:
wrapped_callback = self.make_view_atomic(callback)
try:
response = wrapped_callback(request, *callback_args, **callback_kwargs)
except Exception as e:
response = self.process_exception_by_middleware(e, request)…
# Complain if the view returned None (a common error).
if response is None:
if isinstance(callback, types.FunctionType): # FBV
view_name = callback.__name__
else: # CBV
Variable | Value |
---|---|
callback | <function buy_product at 0x7fb93d0c7620> |
callback_args | () |
callback_kwargs | {'product_id': None} |
middleware_method | <bound method CsrfViewMiddleware.process_view of <django.middleware.csrf.CsrfViewMiddleware object at 0x7fb97f89fd30>> |
request | <WSGIRequest: GET '/en/shop/gui/buy/?product=9&from=/'> |
resolver | <URLResolver 'bwbot_web.urls' (None:None) '^/'> |
resolver_match | ResolverMatch(func=shop.views.buy_product, args=(), kwargs={'product_id': None}, url_name=None, app_names=[], namespaces=[], route=en/shop/?gui/buy/(?P<product_id>\d+)?$) |
response | None |
self | <django.core.handlers.wsgi.WSGIHandler object at 0x7fb97f78ac18> |
wrapped_callback | <function buy_product at 0x7fb93d0c7620> |
/home/bwbot/data/src/bwbot_web/venv/lib/python3.5/site-packages/django/core/handlers/base.py
in _get_response
response = middleware_method(request, callback, callback_args, callback_kwargs)
if response:
break
if response is None:
wrapped_callback = self.make_view_atomic(callback)
try:
response = wrapped_callback(request, *callback_args, **callback_kwargs)…
except Exception as e:
response = self.process_exception_by_middleware(e, request)
# Complain if the view returned None (a common error).
if response is None:
if isinstance(callback, types.FunctionType): # FBV
Variable | Value |
---|---|
callback | <function buy_product at 0x7fb93d0c7620> |
callback_args | () |
callback_kwargs | {'product_id': None} |
middleware_method | <bound method CsrfViewMiddleware.process_view of <django.middleware.csrf.CsrfViewMiddleware object at 0x7fb97f89fd30>> |
request | <WSGIRequest: GET '/en/shop/gui/buy/?product=9&from=/'> |
resolver | <URLResolver 'bwbot_web.urls' (None:None) '^/'> |
resolver_match | ResolverMatch(func=shop.views.buy_product, args=(), kwargs={'product_id': None}, url_name=None, app_names=[], namespaces=[], route=en/shop/?gui/buy/(?P<product_id>\d+)?$) |
response | None |
self | <django.core.handlers.wsgi.WSGIHandler object at 0x7fb97f78ac18> |
wrapped_callback | <function buy_product at 0x7fb93d0c7620> |
/home/bwbot/data/src/bwbot_web/venv/lib/python3.5/site-packages/django/utils/decorators.py
in _wrapped_view
if result is not None:
return result
if hasattr(middleware, 'process_view'):
result = middleware.process_view(request, view_func, args, kwargs)
if result is not None:
return result
try:
response = view_func(request, *args, **kwargs)…
except Exception as e:
if hasattr(middleware, 'process_exception'):
result = middleware.process_exception(request, e)
if result is not None:
return result
raise
Variable | Value |
---|---|
args | () |
kwargs | {'product_id': None} |
middleware | <django.middleware.cache.CacheMiddleware object at 0x7fb93f811978> |
request | <WSGIRequest: GET '/en/shop/gui/buy/?product=9&from=/'> |
result | None |
view_func | <function buy_product at 0x7fb93d0c7400> |
/home/bwbot/data/src/bwbot_web/bwbot_web/shop/views.py
in buy_product
subprocess.Popen(["node", os.path.join(js_dir, "render_server_pack.js")], cwd=js_dir)
@cache_page(60 * 60)
def buy_product(req, product_id):
# if "from" not in req.GET:
# return redirect("/")
lang = req.session.get("lang", "zh-cn")
product_info = product_db.find_one({"id": int(product_id)}, projection={"_id": 0})…
product_info["creator"]["_id"] = None
res = requests.post("http://127.0.0.1:10324?entry={entry}&lang={lang}".format(
entry="buy",
lang=lang,
), json=product_info)
return render(req, "shop/buy.html", {
Variable | Value |
---|---|
lang | 'zh-cn' |
product_id | None |
req | <WSGIRequest: GET '/en/shop/gui/buy/?product=9&from=/'> |
AnonymousUser
Variable | Value |
---|---|
product | '9' |
from | '/' |
No POST data
No FILES data
No cookie data
Variable | Value |
---|---|
CONTENT_LENGTH | '' |
CONTENT_TYPE | 'text/plain' |
DJANGO_SETTINGS_MODULE | 'bwbot_web.settings' |
GATEWAY_INTERFACE | 'CGI/1.1' |
HOME | '/home/bwbot' |
HTTP_ACCEPT | '*/*' |
HTTP_CONNECTION | 'close' |
HTTP_HOST | 'www.bwbot.org' |
HTTP_REFERER | 'http://www.bwbot.org/en/shop/gui/buy?product=9&from=/' |
HTTP_USER_AGENT | 'claudebot' |
HTTP_X_FORWARDED_FOR | '3.81.30.41' |
HTTP_X_REAL_IP | '3.81.30.41' |
LANG | 'en_US.UTF-8' |
LC_ALL | 'en_US.UTF-8' |
LOGNAME | 'bwbot' |
OLDPWD | '/home/bwbot/data/src/bwbot_web' |
PATH | '/home/bwbot/data/src/bwbot_web/venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin' |
PATH_INFO | '/en/shop/gui/buy/' |
PS1 | '(venv) ' |
PWD | '/home/bwbot/data/src/bwbot_web/bwbot_web' |
QUERY_STRING | 'product=9&from=/' |
REMOTE_ADDR | '127.0.0.1' |
REMOTE_HOST | '' |
REQUEST_METHOD | 'GET' |
SCRIPT_NAME | '' |
SERVER_NAME | 'localhost' |
SERVER_PORT | '10326' |
SERVER_PROTOCOL | 'HTTP/1.0' |
SERVER_SOFTWARE | 'WSGIServer/0.2' |
SHELL | '/bin/bash' |
SHLVL | '1' |
TZ | 'UTC' |
USER | 'bwbot' |
VIRTUAL_ENV | '/home/bwbot/data/src/bwbot_web/venv' |
_ | '/home/bwbot/data/src/bwbot_web/bwbot_web/manage.py' |
wsgi.errors | <_io.TextIOWrapper name='<stderr>' mode='w' encoding='UTF-8'> |
wsgi.file_wrapper | '' |
wsgi.input | <django.core.handlers.wsgi.LimitedStream object at 0x7fb93c4c2e80> |
wsgi.multiprocess | False |
wsgi.multithread | True |
wsgi.run_once | False |
wsgi.url_scheme | 'http' |
wsgi.version | (1, 0) |
bwbot_web.settings
Setting | Value |
---|---|
ABSOLUTE_URL_OVERRIDES | {} |
ACCESS_KEY_ID | '********************' |
ACCESS_KEY_SECRET | '********************' |
ADMINS | [] |
ADMIN_EMAIL | '569209940@qq.com' |
ADMIN_PHONE | '13316590527' |
ALLOWED_HOSTS | ['testserver', 'localhost', '127.0.0.1', '*.bwbot.org', 'www.bwbot.org', 'bwbot.org', '192.168.0.8', '192.168.0.17'] |
APPEND_SLASH | True |
AUTHENTICATION_BACKENDS | ['django.contrib.auth.backends.ModelBackend'] |
AUTH_PASSWORD_VALIDATORS | '********************' |
AUTH_USER_MODEL | 'auth.User' |
BASE_DIR | '/home/bwbot/data/src/bwbot_web/bwbot_web' |
CACHES | {'default': {'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': '127.0.0.1:11211'}} |
CACHE_MIDDLEWARE_ALIAS | 'default' |
CACHE_MIDDLEWARE_KEY_PREFIX | '********************' |
CACHE_MIDDLEWARE_SECONDS | 600 |
CHAT_PORT | 19681 |
COMPRESS_CACHEABLE_PRECOMPILERS | () |
COMPRESS_CACHE_BACKEND | 'default' |
COMPRESS_CACHE_KEY_FUNCTION | '********************' |
COMPRESS_CLEAN_CSS_ARGUMENTS | '' |
COMPRESS_CLEAN_CSS_BINARY | 'cleancss' |
COMPRESS_CLOSURE_COMPILER_ARGUMENTS | '' |
COMPRESS_CLOSURE_COMPILER_BINARY | 'java -jar compiler.jar' |
COMPRESS_CSS_COMPRESSOR | 'compressor.css.CssCompressor' |
COMPRESS_CSS_FILTERS | ['compressor.filters.css_default.CssAbsoluteFilter', 'compressor.filters.cssmin.CSSMinFilter'] |
COMPRESS_CSS_HASHING_METHOD | 'mtime' |
COMPRESS_DATA_URI_MAX_SIZE | 1024 |
COMPRESS_DEBUG_TOGGLE | None |
COMPRESS_ENABLED | True |
COMPRESS_JINJA2_GET_ENVIRONMENT | <function CompressorConf.JINJA2_GET_ENVIRONMENT at 0x7fb97efec6a8> |
COMPRESS_JS_COMPRESSOR | 'compressor.js.JsCompressor' |
COMPRESS_JS_FILTERS | ['compressor.filters.jsmin.JSMinFilter'] |
COMPRESS_MINT_DELAY | 30 |
COMPRESS_MTIME_DELAY | 10 |
COMPRESS_OFFLINE | False |
COMPRESS_OFFLINE_CONTEXT | {'STATIC_URL': '/static/'} |
COMPRESS_OFFLINE_MANIFEST | 'manifest.json' |
COMPRESS_OFFLINE_TIMEOUT | 31536000 |
COMPRESS_OUTPUT_DIR | 'CACHE' |
COMPRESS_PARSER | 'compressor.parser.AutoSelectParser' |
COMPRESS_PRECOMPILERS | (('text/coffeescript', 'coffee --compile --stdio'), ('text/less', 'lessc {infile} {outfile}'), ('text/x-sass', 'sass {infile} {outfile}'), ('text/x-scss', 'sass --scss {infile} {outfile}'), ('text/stylus', 'stylus < {infile} > {outfile}')) |
COMPRESS_REBUILD_TIMEOUT | 2592000 |
COMPRESS_ROOT | '/home/bwbot/data/src/bwbot_web/bwbot_web/static' |
COMPRESS_STORAGE | 'compressor.storage.CompressorFileStorage' |
COMPRESS_TEMPLATE_FILTER_CONTEXT | {'STATIC_URL': '/static/'} |
COMPRESS_URL | '/static/' |
COMPRESS_URL_PLACEHOLDER | '/__compressor_url_placeholder__/' |
COMPRESS_VERBOSE | False |
COMPRESS_YUGLIFY_BINARY | 'yuglify' |
COMPRESS_YUGLIFY_CSS_ARGUMENTS | '--terminal' |
COMPRESS_YUGLIFY_JS_ARGUMENTS | '--terminal' |
COMPRESS_YUI_BINARY | 'java -jar yuicompressor.jar' |
COMPRESS_YUI_CSS_ARGUMENTS | '' |
COMPRESS_YUI_JS_ARGUMENTS | '' |
CORS_ALLOW_HEADERS | ('accept', 'accept-encoding', 'authorization', 'content-type', 'dnt', 'origin', 'user-agent', 'x-csrftoken', 'x-requested-with', 'sessionid') |
CORS_ORIGIN_ALLOW_ALL | True |
CSRF_COOKIE_AGE | 31449600 |
CSRF_COOKIE_DOMAIN | None |
CSRF_COOKIE_HTTPONLY | False |
CSRF_COOKIE_NAME | 'csrftoken' |
CSRF_COOKIE_PATH | '/' |
CSRF_COOKIE_SAMESITE | 'Lax' |
CSRF_COOKIE_SECURE | False |
CSRF_FAILURE_VIEW | 'django.views.csrf.csrf_failure' |
CSRF_HEADER_NAME | 'HTTP_X_CSRFTOKEN' |
CSRF_TRUSTED_ORIGINS | [] |
CSRF_USE_SESSIONS | False |
DATABASES | {'default': {'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0, 'ENGINE': 'django.db.backends.sqlite3', 'HOST': '', 'NAME': '/home/bwbot/data/src/bwbot_web/bwbot_web/db.sqlite3', 'OPTIONS': {}, 'PASSWORD': '********************', 'PORT': '', 'TEST': {'CHARSET': None, 'COLLATION': None, 'MIRROR': None, 'NAME': None}, 'TIME_ZONE': None, 'USER': ''}} |
DATABASE_ROUTERS | [] |
DATA_UPLOAD_MAX_MEMORY_SIZE | 2621440 |
DATA_UPLOAD_MAX_NUMBER_FIELDS | 1000 |
DATETIME_FORMAT | 'N j, Y, P' |
DATETIME_INPUT_FORMATS | ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%Y-%m-%d', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%Y', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M', '%m/%d/%y'] |
DATE_FORMAT | 'N j, Y' |
DATE_INPUT_FORMATS | ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y'] |
DEBUG | True |
DEBUG_PROPAGATE_EXCEPTIONS | False |
DECIMAL_SEPARATOR | '.' |
DEFAULT_CHARSET | 'utf-8' |
DEFAULT_CONTENT_TYPE | 'text/html' |
DEFAULT_EXCEPTION_REPORTER_FILTER | 'django.views.debug.SafeExceptionReporterFilter' |
DEFAULT_FILE_STORAGE | 'django.core.files.storage.FileSystemStorage' |
DEFAULT_FROM_EMAIL | 'webmaster@localhost' |
DEFAULT_INDEX_TABLESPACE | '' |
DEFAULT_TABLESPACE | '' |
DISALLOWED_USER_AGENTS | [] |
EMAIL_BACKEND | 'django.core.mail.backends.smtp.EmailBackend' |
EMAIL_HOST | 'localhost' |
EMAIL_HOST_PASSWORD | '********************' |
EMAIL_HOST_USER | '' |
EMAIL_PORT | 25 |
EMAIL_SSL_CERTFILE | None |
EMAIL_SSL_KEYFILE | '********************' |
EMAIL_SUBJECT_PREFIX | '[Django] ' |
EMAIL_TIMEOUT | None |
EMAIL_USE_LOCALTIME | False |
EMAIL_USE_SSL | False |
EMAIL_USE_TLS | False |
FILE_CHARSET | 'utf-8' |
FILE_UPLOAD_DIRECTORY_PERMISSIONS | None |
FILE_UPLOAD_HANDLERS | ['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler'] |
FILE_UPLOAD_MAX_MEMORY_SIZE | 2621440 |
FILE_UPLOAD_PERMISSIONS | None |
FILE_UPLOAD_TEMP_DIR | None |
FIRST_DAY_OF_WEEK | 0 |
FIXTURE_DIRS | [] |
FORCE_SCRIPT_NAME | None |
FORMAT_MODULE_PATH | None |
FORM_RENDERER | 'django.forms.renderers.DjangoTemplates' |
IGNORABLE_404_URLS | [] |
INSTALLED_APPS | ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'compressor', 'home', 'shop', 'user', 'utils', 'image', 'webview', 'chat', 'oauth'] |
INTERNAL_IPS | [] |
LANGUAGES | {('zh-cn', '中文'), ('en', 'English')} |
LANGUAGES_BIDI | ['he', 'ar', 'fa', 'ur'] |
LANGUAGE_CODE | 'zh-cn' |
LANGUAGE_COOKIE_AGE | None |
LANGUAGE_COOKIE_DOMAIN | None |
LANGUAGE_COOKIE_NAME | 'django_language' |
LANGUAGE_COOKIE_PATH | '/' |
LOCALE_PATHS | ['/home/bwbot/data/src/bwbot_web/bwbot_web/locale'] |
LOGGING | {} |
LOGGING_CONFIG | 'logging.config.dictConfig' |
LOGIN_REDIRECT_URL | '/accounts/profile/' |
LOGIN_URL | '/accounts/login/' |
LOGOUT_REDIRECT_URL | None |
MANAGERS | [] |
MEDIA_ROOT | '/home/bwbot/data/src/bwbot_web/bwbot_web/media' |
MEDIA_URL | '' |
MESSAGE_STORAGE | 'django.contrib.messages.storage.fallback.FallbackStorage' |
MIDDLEWARE | ['django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.locale.LocaleMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware'] |
MIGRATION_MODULES | {} |
MONGO_DB_NAME | 'bwbotv1' |
MONTH_DAY_FORMAT | 'F j' |
NUMBER_GROUPING | 0 |
OAUTH | {'baidu': {'api_key': '********************', 'api_secret': '********************', 'auth_uri': 'https://openapi.baidu.com/oauth/2.0/authorize', 'redirect_uri': 'https://www.bwbot.org/oauth_back/baidu', 'token_uri': '********************', 'user_info_api': '********************'}} |
PASSWORD_HASHERS | '********************' |
PASSWORD_RESET_TIMEOUT_DAYS | '********************' |
PREPEND_WWW | False |
ROOT_URLCONF | 'bwbot_web.urls' |
SECRET_KEY | '********************' |
SECURE_BROWSER_XSS_FILTER | False |
SECURE_CONTENT_TYPE_NOSNIFF | False |
SECURE_HSTS_INCLUDE_SUBDOMAINS | False |
SECURE_HSTS_PRELOAD | False |
SECURE_HSTS_SECONDS | 0 |
SECURE_PROXY_SSL_HEADER | None |
SECURE_REDIRECT_EXEMPT | [] |
SECURE_SSL_HOST | None |
SECURE_SSL_REDIRECT | False |
SERVER_EMAIL | 'root@localhost' |
SESSION_CACHE_ALIAS | 'default' |
SESSION_COOKIE_AGE | 1209600 |
SESSION_COOKIE_DOMAIN | None |
SESSION_COOKIE_HTTPONLY | True |
SESSION_COOKIE_NAME | 'sessionid' |
SESSION_COOKIE_PATH | '/' |
SESSION_COOKIE_SAMESITE | 'Lax' |
SESSION_COOKIE_SECURE | False |
SESSION_ENGINE | 'django.contrib.sessions.backends.db' |
SESSION_EXPIRE_AT_BROWSER_CLOSE | False |
SESSION_FILE_PATH | None |
SESSION_SAVE_EVERY_REQUEST | False |
SESSION_SERIALIZER | 'django.contrib.sessions.serializers.JSONSerializer' |
SETTINGS_MODULE | 'bwbot_web.settings' |
SHORT_DATETIME_FORMAT | 'm/d/Y P' |
SHORT_DATE_FORMAT | 'm/d/Y' |
SIGNING_BACKEND | 'django.core.signing.TimestampSigner' |
SILENCED_SYSTEM_CHECKS | [] |
STATICFILES_DIRS | [] |
STATICFILES_FINDERS | ('django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', 'compressor.finders.CompressorFinder') |
STATICFILES_STORAGE | 'django.contrib.staticfiles.storage.StaticFilesStorage' |
STATIC_ROOT | '/home/bwbot/data/src/bwbot_web/bwbot_web/static' |
STATIC_URL | '/static/' |
SUPPORT_EMAIL | 'support@bwbot.org' |
SUPPORT_PASSWORD | '********************' |
TEMPLATES | [{'APP_DIRS': True, 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'OPTIONS': {'context_processors': ['django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'home.template_tags.get_current_year']}}] |
TEST | False |
TEST_NON_SERIALIZED_APPS | [] |
TEST_RUNNER | 'django.test.runner.DiscoverRunner' |
THOUSAND_SEPARATOR | ',' |
TIME_FORMAT | 'P' |
TIME_INPUT_FORMATS | ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M'] |
TIME_ZONE | 'UTC' |
USE_I18N | True |
USE_L10N | True |
USE_THOUSAND_SEPARATOR | False |
USE_TZ | True |
USE_X_FORWARDED_HOST | False |
USE_X_FORWARDED_PORT | False |
WSGI_APPLICATION | 'bwbot_web.wsgi.application' |
X_FRAME_OPTIONS | 'SAMEORIGIN' |
YEAR_MONTH_FORMAT | 'F Y' |
You're seeing this error because you have DEBUG = True
in your
Django settings file. Change that to False
, and Django will
display a standard page generated by the handler for this status code.