热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python原生代码(无框架,无AJAX技术)前后端数据交互

采用form表格的post请求向后端传递数据本系列即尽量采用原生代码方式实现浏览器与web服务器之间进行交互;帮助小白们理解web服务器的工作原理。采用form表格从前端浏览器向后

采用form表格的post请求向后端传递数据

本系列即尽量采用原生代码方式实现浏览器与web服务器之间进行交互;帮助小白们理解web服务器的工作原理。
采用form表格从前端浏览器向后端提交数据是一种最原始的前端传递数据的方式,虽然代码执行较为麻烦,但是却有助于深刻理解前后端的交互原理。

以下面html代码为例:
<form action="login" method="post">
	<p>
		<span class="spanText">用户名</span>
		<input type="text" name="username" class="uText">
	</p>
	<p>
		<span class="spanText">&nbsp;&nbsp;</span>
		<input type="password" name="passwd" class="uText" placeholder="请输入6-20位号码字符">
	</p>
	<span class="spanText"></span>
	<p>
		<span class="isSaved"><input type="checkbox" name="isSaved" checked>记住密码</span>
		<span class="forget"><a href="#">忘记密码?</a>
			<a href="#">快捷登录</a></span>
	</p>
	<p>
		<span class="spanText"></span>
		<input type="submit" name="login" class="login" value="登录">
		<a href="./register.html"><input type="button" name="regist" class="regist" value="注册页面"></a>
	</p>
</form>

python原生代码(无框架,无AJAX技术)前后端数据交互
点击‘登录’按钮,表格中的用户名和密码信息通过表格以POST方式提交到后台。
在不使用框架中的request方法的前提下,可以直接从请求信息的请求体部分获取数据。
(提交的信息都保存在了请求体中,可以采用以下代码获取。)

获取信息执行代码(web服务器执行代码,部分代码截取)

def handle_client(self, conn):
    # 接受浏览器请求
    request_data = conn.recv(2048).decode('utf-8')
    request_lines = request_data.splitlines()
    print(request_lines)
    # 获取请求行信息(判断请求方式 get还是post )
    request_line = request_lines[0]
    # 获取请求体信息(post请求信息在请求体中,如果为get请求,获取内容为空)
    request_msges = request_lines[-1]

举例(用户名为:闪电侠,密码为123456)

后台获取的有效请求体信息为:

'username=%E9%97%AA%E7%94%B5%E4%BE%A0&passwd=123456&isSaved=on&login=%E7%99%BB%E5%BD%95'

后端字符串解析代码

执行代码如下(代码辅助理解,不能直接执行):

import os
from urllib.parse import unquote
from collections import defaultdict

#定义函数将请求体字符串转化为字典格式
def msg_to_dict(msg):
    lst = msg.split('&')
    del lst[-1]
    mdt = defaultdict(list)
    for i in lst:
        j = i.split('=')
        print(unquote(j[1]))                                #urllib.parse中的unquote方法将请求体信息中的中文加密信息(含有%)解码为中文字符。
        mdt.setdefault('%s'%j[0], []).append(unquote(j[1]))
    return mdt
    
#定义登录函数
def login(env,set_headers):
    status = '200 OK'
    headers = [('Content-Type', 'text/html;charset=utf-8')] #允许前端接收utf-8格式的中文响应字符
    set_headers(status, headers)
    msg = env.get('MSG')                                    #获取前端提交的响应体内容(获取用户名和密码)
    mdt = msg_to_dict(msg)                                  #将请求体信息转化为字典格式
    if mdt['username'][0] == '' or mdt['passwd'][0] == '':
        return '用户名或密码有误,请重新输入!!'
    else:
        res = do_login(mdt)                                #进一步执行登录指令(函数略)
        if res:
            filename = os.path.join(BASE_DIR, 'static/hero.html')
            print(filename)
            with open(filename,'r') as fd:
                data = fd.read()
            return data
        else:
            return 'Username or password is wrong!'

按照上述思路代码执行后,案例的代码执行结果如下

前端数据提交后,后端将请求体信息转化为字典的执行结果:
mdt = {'isSaved': ['on'], 'username': ['闪电侠'], 'passwd': ['123456']})

后端根据解析出的数据信息进一步执行登录函数。

在不采用request方法的前提下,客户端的注册,登录,以及发起数据库的增删改查请求,都可以采用这种思路来完成。

推荐阅读
  • 在PHP中如何正确调用JavaScript变量及定义PHP变量的方法详解 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 本文详细探讨了 jQuery 中 `ajaxSubmit` 方法的使用技巧及其应用场景。首先,介绍了如何正确引入必要的脚本文件,如 `jquery.form.js` 和 `jquery-1.8.0.min.js`。接着,通过具体示例展示了如何利用 `ajaxSubmit` 方法实现表单的异步提交,包括数据的发送、接收和处理。此外,还讨论了该方法在不同场景下的应用,如文件上传、表单验证和动态更新页面内容等,提供了丰富的代码示例和最佳实践建议。 ... [详细]
  • 本文深入探讨了Ajax的工作机制及其在现代Web开发中的应用。Ajax作为一种异步通信技术,改变了传统的客户端与服务器直接交互的模式。通过引入Ajax,客户端与服务器之间的通信变得更加高效和灵活。文章详细分析了Ajax的核心原理,包括XMLHttpRequest对象的使用、数据传输格式(如JSON和XML)以及事件处理机制。此外,还介绍了Ajax在提升用户体验、实现动态页面更新等方面的具体应用,并讨论了其在当前Web开发中的重要性和未来发展趋势。 ... [详细]
  • 包含phppdoerrorcode的词条 ... [详细]
  • 本文详细解析了ASP.NET 2.0中的Callback机制,不仅介绍了基本的使用方法,还深入探讨了其背后的实现原理。通过对比Atlas框架,帮助读者更好地理解和应用这一机制。 ... [详细]
  • Spring Boot 中配置全局文件上传路径并实现文件上传功能
    本文介绍如何在 Spring Boot 项目中配置全局文件上传路径,并通过读取配置项实现文件上传功能。通过这种方式,可以更好地管理和维护文件路径。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
  • Keepalived 提供了多种强大且灵活的后端健康检查机制,包括 HTTP_GET、SSL_GET、TCP_CHECK、SMTP_CHECK 和 MISC_CHECK 等多种检测方法。这些健康检查功能确保了高可用性环境中的服务稳定性和可靠性。通过合理配置这些检查方式,可以有效监测后端服务器的状态,及时发现并处理故障,从而提高系统的整体性能和可用性。 ... [详细]
  • 技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告
    技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告 ... [详细]
author-avatar
骑着母猪去相亲
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有