HTML5 中的表单 "action" 属性究竟如何将数据发送到实时网站的后端?
How exactly does the form "action" attribute in HTML5 send the data to the backend for a live website?
如果这是一个非常愚蠢的问题,我很抱歉,但在理解 action
属性的确切工作原理时,我觉得我遗漏了一些东西。我在本地主机上遇到的大多数教程 运行 所以当你简单地提供 action = "dir/register.py"
时它是有意义的,因为它位于同一台机器上并且 POST request
知道去哪里。
但是,当我们制作一个实时网站时,假设我制作了一个 EC2 实例,安装 Ubuntu 并将其用作后端 - 我会得到一个 IP 地址。我会将其设为静态,然后向 DNS 注册以告诉互联网我的网站名称 xyz.com 处于静态 IP x:x:x:x
.
现在,假设用户请求注册页面,我的路由会将必要的 html、css、js 页面发送回浏览器,供用户输入详细信息。我不明白的是,当我指定的 action 属性仍然是 action = "dir/register.py"
时,浏览器如何知道在提交时将其发送回后端。
浏览器是否自动记住请求的来源并通过附加必要的 IP
来指定我的脚本处理注册的绝对路径来内部处理它,或者我是否必须将操作属性更改为 action = "x:x:x:x/dir/register.py"
制作实时网站?
编辑 1:
url 处理表单数据的代码(可能):
@users.route("/register", methods = ["GET","POST"])
def register():
if current_user.is_authenticated:
return redirect(url_for('main.home'))
form = RegistrationForm()
if form.validate_on_submit():
hashed_password = bcrypt.generate_password_hash(form.password.data).decode('utf-8')
user = User(username = form.username.data, email = form.email.data, password = hashed_password)
db.session.add(user)
db.session.commit()
flash(f'Account created for {form.username.data}!', 'success')
return redirect(url_for('users.login'))
return render_template('register.html', title = 'Register', form = form)
不懂就问。没关系。
关于您的问题,您可以在 html 页面中将路径指定为相对路径或绝对路径。绝对 url 以 http://
或 https://
开头并包含文档的完整地址,如:http://example.com/blabla
。相对 url 具有相对于当前 url 的部分路径,就像您在 http://example.com/index.html
上并且 action
属性中有一个相对路径,例如 dir/xyz.py
浏览器自动理解此资源在 http://example.com/dir/xyz.py
上。但是关于您的问题的另一件事是,您不能将 python 文件作为表单的操作 url 传递。应该有一个处理表单数据的url。
更新:
当你询问 url 处理数据时,我写下这个更新:
当您将 html 表单的操作参数设置为 /something
时,假设您的方法是 POST,您是在告诉浏览器将您的表单数据提交到 POST 的路径方法。我希望你知道什么是方法和区别,但如果你没有问题,google 它并且有很多关于它的内容。正如我所说,该路径应该响应请求。罕见的 python 文件无法处理任何请求,浏览器也不会 运行 python 文件,如果浏览器可以 运行 python 文件,它就不会无助于导致 python 文件应该 运行 在您的服务器上。
Flask 和 Django 等 python 框架可帮助您通过 python 轻松构建 Web 应用程序。如果我没记错的话,你应该 运行 python main.py
,然后服务器将启动并且像 localhost:<port>/register
这样的路径将可用。我希望这对你有帮助。祝你好运。
如果这是一个非常愚蠢的问题,我很抱歉,但在理解 action
属性的确切工作原理时,我觉得我遗漏了一些东西。我在本地主机上遇到的大多数教程 运行 所以当你简单地提供 action = "dir/register.py"
时它是有意义的,因为它位于同一台机器上并且 POST request
知道去哪里。
但是,当我们制作一个实时网站时,假设我制作了一个 EC2 实例,安装 Ubuntu 并将其用作后端 - 我会得到一个 IP 地址。我会将其设为静态,然后向 DNS 注册以告诉互联网我的网站名称 xyz.com 处于静态 IP x:x:x:x
.
现在,假设用户请求注册页面,我的路由会将必要的 html、css、js 页面发送回浏览器,供用户输入详细信息。我不明白的是,当我指定的 action 属性仍然是 action = "dir/register.py"
时,浏览器如何知道在提交时将其发送回后端。
浏览器是否自动记住请求的来源并通过附加必要的 IP
来指定我的脚本处理注册的绝对路径来内部处理它,或者我是否必须将操作属性更改为 action = "x:x:x:x/dir/register.py"
制作实时网站?
编辑 1: url 处理表单数据的代码(可能):
@users.route("/register", methods = ["GET","POST"])
def register():
if current_user.is_authenticated:
return redirect(url_for('main.home'))
form = RegistrationForm()
if form.validate_on_submit():
hashed_password = bcrypt.generate_password_hash(form.password.data).decode('utf-8')
user = User(username = form.username.data, email = form.email.data, password = hashed_password)
db.session.add(user)
db.session.commit()
flash(f'Account created for {form.username.data}!', 'success')
return redirect(url_for('users.login'))
return render_template('register.html', title = 'Register', form = form)
不懂就问。没关系。
关于您的问题,您可以在 html 页面中将路径指定为相对路径或绝对路径。绝对 url 以 http://
或 https://
开头并包含文档的完整地址,如:http://example.com/blabla
。相对 url 具有相对于当前 url 的部分路径,就像您在 http://example.com/index.html
上并且 action
属性中有一个相对路径,例如 dir/xyz.py
浏览器自动理解此资源在 http://example.com/dir/xyz.py
上。但是关于您的问题的另一件事是,您不能将 python 文件作为表单的操作 url 传递。应该有一个处理表单数据的url。
更新:
当你询问 url 处理数据时,我写下这个更新:
当您将 html 表单的操作参数设置为 /something
时,假设您的方法是 POST,您是在告诉浏览器将您的表单数据提交到 POST 的路径方法。我希望你知道什么是方法和区别,但如果你没有问题,google 它并且有很多关于它的内容。正如我所说,该路径应该响应请求。罕见的 python 文件无法处理任何请求,浏览器也不会 运行 python 文件,如果浏览器可以 运行 python 文件,它就不会无助于导致 python 文件应该 运行 在您的服务器上。
Flask 和 Django 等 python 框架可帮助您通过 python 轻松构建 Web 应用程序。如果我没记错的话,你应该 运行 python main.py
,然后服务器将启动并且像 localhost:<port>/register
这样的路径将可用。我希望这对你有帮助。祝你好运。