Это веб-сайт Django, тестируемый через небольшой сервер, который поставляется с Django:
python manage.py runserver 8080
Клиент тестирования входит из браузера, запущенного на машине во внешней сети. Т.е. браузер работает не на сервере, а на рабочем столе, и запросы поступают через Inte rnet. Запрос будет иметь типичную форму https://sub.awebsite.com/path
Представление ajax POST включает в себя вызов поставщика, который вы можете распознать:
class view_class ...
def post(self, request)
...
new_session = stripe.checkout.Session.create(
api_key=djstripe.settings.STRIPE_SECRET_KEY
,line_items=[item]
,payment_method_types=['card']
,success_url='https://a.awebsite.com/path?session_id={CHECKOUT_SESSION_ID}'
,cancel_url='https://a.awebsite.com/other_path'
)
Обратите внимание на последний два аргумента встраивают буквальные строки URI в веб-сайт. Для python и Django они не имеют особого значения. Это просто струны. Однако позже клиент будет использовать их для перенаправления обратно на веб-сайт. Эта буквальная кодировка действительно является проблемой, потому что сайт меняется в зависимости от того, кто его тестирует или был ли он выпущен. Я бы предпочел использовать функции build_absolute_uri
или get_current_site
для построения этих строк. Однако эти функции просто печатают localhost. Например, я помещаю эти два оператора печати чуть выше вызова функции в stripe.checkout.Session.create
:
print("get_current_site: ", get_current_site(request))
print("post absolute uri: ", request.build_absolute_uri())
И они печатают:
get_current_site: localhost:8080
absolute uri: http://localhost:8080/...
Я думаю, что absolute_uri
получает информацию из там же, что и get_current_site
.
Теперь да, в файле настроек localhost также указан как разрешенный хост. Если я удалю его, то получаю панель Django spla sh, сообщающую мне, что мне нужно добавить localhost в список ALLOWED_HOSTS. (Я предполагаю, что это не будет проблемой при входе через wsgi, потому что для этого требуется разрешенный хост с правильным именем.)
Так почему они не печатают имя сайта? Откуда идет localhost? .. и как мне получить фактическое имя сайта, которое клиент вводит в браузер, чтобы перейти на сайт?