python 网站 使用表单和模板

news/2024/5/9 12:53:22/文章来源:https://blog.csdn.net/weixin_34146986/article/details/89563027

如果像前面那么做网站,也太丑陋了。并且功能也不多。

在实际做网站中,现在都要使用一个模板,并且在用户直接看到的页面,用html语言来写页面。

在做网站的行业里面,常常将HTML+CSS+JS组成的网页,称作“前端”。它主要负责展示,或者让用户填写一些表格,通过JS提交给用python写的程序,让python程序来处理数据,那些处理数据的python程序称之为“后端”。我常常提醒做“后端”的,不要轻视“前端”。如果立志成为全栈工程师,就要从前到后都通。

关于本讲,主要是要演示一个用模板(HTML)写一个表单,然后提交给后端的python程序,再转到另外一个显示的前端页面显示。为了简化流程,这个过程中没有数据处理和CSS+Javascript的工作,所有界面会丑陋。

一个表单

要做一个前端的页面,显示的内容就如同下图样式

image.png

相应代码是,并命名为index.html,存在一个名称是template的目录中。

<!DOCTYPE html>
<html><head><title>sign in your name</title></head><body><h2>Please sign in.</h2><form method="post" action="/user"><p>Name:<br><input type="text" name="username"></p><p>Email:<br><input type="text" name="email"></p><p>Website:<br><input type="text" name="website"></p><p>Language:<br><input type="text" name="language"></p><input type="submit" value="ok,submit my information"></form></body>
</html>

上面的代码是比较简单,如果熟悉html的话,不熟悉也不要紧,网上搜索就能理解。注意,没有CSS+JS,所以简单。如果在真正开发中,这两个是不能少的。

有了这个表单之后,如果用户把相关信息都填写好了。点击下面的按钮,就应该提交给后端的python程序来处理。

后端处理程序

做为tornado驱动的网站,首先要能够把前面的index.html显示出来,这个一般用get方法,显示的样式就按照上面的样子显示。

用户填写信息之后,点击按钮提交。注意观察上面的代码表单中,设定了post方法,所以,在python程序中,应该有一个post方法专门来接收所提交的数据,然后把提交的数据在另外一个网页显示出来。

在表单中还要注意,有一个action=/user,表示的是要将表单的内容提交给/user路径所对应的程序来处理。这里需要说明的是,在网站中,数据提交和显示,路径是非常重要的。

按照以上意图,编写如下代码,并命名为usercontroller.py,保存在template目录中

#!/usr/bin/env python
#coding:utf-8import os.pathimport tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.webfrom tornado.options import define, options
define("port", default=8000, help="run on the given port", type=int)class IndexHandler(tornado.web.RequestHandler):def get(self):self.render("index.html")class UserHandler(tornado.web.RequestHandler):def post(self):user_name = self.get_argument("username")user_email = self.get_argument("email")user_website = self.get_argument("website")user_language = self.get_argument("language")self.render("user.html",username=user_name,email=user_email,website=user_website,language=user_language)handlers = [(r"/", IndexHandler),(r"/user", UserHandler)
]template_path = os.path.join(os.path.dirname(__file__),"template")if __name__ == "__main__":tornado.options.parse_command_line()app = tornado.web.Application(handlers, template_path)http_server = tornado.httpserver.HTTPServer(app)http_server.listen(options.port)tornado.ioloop.IOLoop.instance().start()

这次代码量多一些。但是多数在前面讲述tornado基本结构的时候已经说过了,跟前面一样,这里仅仅把重点的和新出现的进行讲述,如果对某些内容还有疑问,可以参考前面的相关章节。

在引入的模块上,多了一个import os.path,这个模块主要用在:

template_path = os.path.join(os.path.dirname(__file),"template")

这是要获取存放程序的目录template的路径。

重点看两个类中都有的self.render(),用这个方法引入相应的模板。

self.render("index.html")

显示index.html模板,但是此时并没有向模板网页传递任何数据,仅仅显示罢了。下面一个:

self.render("user.html",username=user_name,email=user_email,website=user_website,language=user_language)

与前面的不同在于,不仅仅是要引用模板网页user.html,还要向这个网页传递一些数据,例如username=user_name,含义就是,在模板中,某个地方是用username来标示得到的数据,而user_name是此方法中的一个变量,也就是对应一个数据,那么模板中的username也就对应了user_name的数据,这是通过username=user_name完成的。后面的变量同理。

那么,user_name的数据是哪里来的呢?就是在index.html页面的表单中提交上来的。注意观察路径的设置,r"/user", UserHandler,也就是在form中的action='/user',就是要将数据提交给UserHandler处理,并且是通过post方法。所以,在UserHandler类中,有post()方法来处理这个问题。通过self.get_argument()来接收前端提交过来的数据,接收方法就是,self.get_argument()的参数与index.html表单form中的各项的name值相同,就会得到相应的数据。例如user_name = self.get_argument("username"),就能够得到index.html表单中name为"username"的元素的值,并赋给user_name变量。

还差一个网页。

显示结果

在上面的代码中,又多了一个模板:user.html,对这个模板,跟前面那个模板有一点儿不一样的地方,就是要引入一些变量。它的代码是这样的:

<!DOCTYPE html>
<html><head><title>sign in your name</title></head><body><h2>Your Information</h2><p>Your name is {{username}}</p><p>Your email is {{email}}</p><p>Your website is {{website}}, it is very good. This website is make by {{language}}</p></body>
</html>

请将上面的代码和这句话对照:

self.render("user.html",username=user_name,email=user_email,website=user_website,language=user_language)

上面的模板代码存储为名为user.html的文件,并且和前面已经保存的在同一个目录中。

看HTML模板代码中,有类似{{username}}的变量,模板中用{{}}引入变量,这个变量就是在self.render()中规定的,两者变量名称一致,对应将相应的值对象引入到模板中。

运行结果

进入到template目录,执行:

~/template$ python userscontroller.py

然后在浏览器的地址栏中输入

http://localhost:8000

出现如下图的表单,并填写表单内容

image.png

点击“按钮”之后:
image.png

这样就实现了一个简单表单提交的网站。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_728609.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TP5实现支付宝电脑网站支付学习笔记

这两天在公司做一个小型WEB项目,需要有支付功能。第一次做支付宝的支付&#xff0c;踩了点小坑&#xff0c;还算顺利。激动的我赶紧记下实现的流程。第一步当然是在支付宝开放平台申请公钥私钥APPID等&#xff0c;支付宝关官方文档都有详细介绍&#xff0c;这里就省略。申请完了…

Jenkins与网站代码上线解决方案

1.1 前言 Jenkins是一个用Java编写的开源的持续集成工具。在与Oracle发生争执后&#xff0c;项目从Hudson项目独立。 Jenkins提供了软件开发的持续集成服务。它运行在Servlet容器中&#xff08;例如Apache Tomcat&#xff09;。它支持软件配置管理&#xff08;SCM&#xff09;…

大型网站技术架构(五)网站高可用架构

2019独角兽企业重金招聘Python工程师标准>>> 网站的可用性&#xff08;Avaliability&#xff09;描述网站可有效访问的特性。 1、网站可用性的度量与考核 网站不可用时间&#xff08;故障时间&#xff09;故障修复时间点-故障发现&#xff08;报告&#xff09;时间点…

19款资源整合类网站推荐:每一个网站都堪称以一敌百

强烈推荐这19个资源聚合网站&#xff0c;每一个网站都足以堪称“以一敌百”&#xff01;因为每一个网站都聚合了相当多不同类型、不同领域的网站资源&#xff0c;并且做了分类导航方便大家查找使用~所以&#xff0c;与其收藏那么多零碎的网址&#xff0c;不如收藏下面这些网站资…

百度竞价逐渐淘汰行业网站

最近松松编辑杰哥从百度站长论坛一位圈内站长爆料发帖了解到&#xff0c;百度竞价落地页正在逐渐剔除企业网站&#xff0c;主推自家积木鱼平台和阿里店铺作为竞价推广落地页&#xff0c;逐渐淘汰企业官网! 根据杰哥从站长发帖内容得知&#xff0c;该站长表示&#xff0c;不知道…

曾经的四大门户网站之一,新浪,这些年错过了三个重要的成长机会

曾经的互联网四大门户网站&#xff0c;新浪、网易、搜狐、腾讯&#xff0c;在最初新浪应该是占据首要位置的&#xff0c;因为新浪曾经在中国互联网发展历史上创造过多个第一。 例如&#xff0c;1997年10月&#xff0c;新浪网的前身四通利方获得了一笔数百万美元的风险投资&…

突发丨网站欠费、Netlify故障,BSC上多个项目官网访问异常

从昨天下午开始&#xff0c;BSC上多个项目官网访问异常。先是24号上线的Curve仿盘椭圆金融&#xff08;ellipsis.finance&#xff09;在昨天中午无法打开&#xff0c;这个项目在不到一天的时间里就吸引9亿美元资金入场。昨晚10点多&#xff0c;pancakeswap也无法打开。pancakes…

页面放在哪_企业全网营销型网站建设的重点有哪一些?

企业全网营销型网站建设的重点有哪一些&#xff1f;营销型网站建设&#xff0c;要注重实效&#xff0c;注重客户的需求点&#xff0c;企业做出来营销型网站&#xff0c;不是给自己看的&#xff0c;是给客户看的&#xff0c;这个所有企业都要弄明白&#xff0c;一个网站&#xf…

对csdn网站本身的一些建议

首先&#xff0c;表明自己的立场&#xff1a;我从5月份开始在csdn写博客&#xff0c;前段时间写的不多&#xff0c;但是最近越来越迷上了这个地方&#xff0c;是csdn的忠实用户。其次&#xff0c;我以下提的建议&#xff0c;都是善意的建议&#xff0c;目的是让csdn越来越好&am…

2006年主流建站系统及其典型网站演示(CMS篇)

CMS系统已经成为个人站长建站过程中必不可少的工具&#xff0c;现在已经基本看不到多少站长还在靠手工写HTML页面&#xff0c;究其原因无非是因为CMS具有使用简单&#xff0c;维护方便等众多优点。CMS的发展也带来了个人网站的长足发展&#xff01;各色各样的网站使网络世界更加…

如何将JSP的网页部署到网上变成网站

我们都知道我们做的JSP项目&#xff0c;JSP网页只能在本地&#xff08;自己电脑&#xff09;或者局域网&#xff08;内网&#xff09;访问&#xff0c;如何让所有人都能访问呢&#xff1f; 一. 常见有几大建站语言&#xff0c;有php&#xff0c;ASP&#xff0c;ASP.NET&#…

如何将JSP的网页部署到网上变成网站

我们都知道我们做的JSP项目&#xff0c;JSP网页只能在本地&#xff08;自己电脑&#xff09;或者局域网&#xff08;内网&#xff09;访问&#xff0c;如何让所有人都能访问呢&#xff1f; 一. 常见有几大建站语言&#xff0c;有php&#xff0c;ASP&#xff0c;ASP.NET&#xf…

JavaWeb学习笔记(三)--Web应用组织结构和搭建网站

一、Web应用的组成结构 开发web应用时&#xff0c;不同类型的文件有严格的存放规则&#xff0c;否则不仅可能会使web应用无法访问&#xff0c;还会导致web服务器启动报错。 web.xml文件是整个web应用中最重要的配置文件&#xff0c;必须放置在WEB-INF目录中。在开发web应用时&a…

大型网站技术架构(五)网站高可用架构

2019独角兽企业重金招聘Python工程师标准>>> 网站的可用性&#xff08;Avaliability&#xff09;描述网站可有效访问的特性。 1、网站可用性的度量与考核 网站不可用时间&#xff08;故障时间&#xff09;故障修复时间点-故障发现&#xff08;报告&#xff09;时间点…

WEB网站性能优化之redis缓存技术Centos7

请查看官网&#xff1a; 如果浏览不顺畅请到原文章出处&#xff1a;https://www.sky8g.com/technology/363/ 请注意可能会提示风险&#xff0c;这是CSDN网站设置的问题&#xff0c;如果文章内的链接不是他们的网址,都会对用户提示有风险,请点击继续访问,本网站全部文章为免费技…

php免费学习网站

共同学习&#xff0c;共同进步网站&#xff0c;一个神奇的网站&#xff1a;www.sky8g.com 如果浏览不顺畅请到原文章出处&#xff1a;https://www.sky8g.com/category/news/ 请注意可能会提示风险&#xff0c;这是csdn官网如果不是他们的网址,其他的网址都会提示有风险,这是C…

mysqldump备份数据时网站访问过慢[甚至无法访问]解决办法

现在大多数网站使用都是数据库mysql或者mariadb数据库&#xff0c;因为最直接的原因就是他是开源的的&#xff0c;不需要支付二外的费用&#xff0c;并且性能也很不错&#xff0c;这也是mysql和mariadb如此受人们喜欢的原因。那么我们在进行的数据库的备份的时候&#xff0c;如…

Docker使用docker compose搭建Jellyfin私人媒体服务器 个人电影网站

->Docker及docker compose的安装点这里 创建 docker-compose.yml 文件 version: "3" services:jellyfin:image: jellyfin/jellyfincontainer_name: jellyfinstdin_open: truetty: truerestart: alwaysports:- 9004:8096volumes:- ./config:/config- /nas:/naspr…

获取cdn配置风暴英雄_GitHub Actions+腾讯云COS+SCF云函数刷新CDN自动化部署静态网站...

。作者介绍Stille&#xff1a;互联网重度爱好者&#xff0c;喜欢追求一切基于互联网的前沿科技、技术、产品&#xff0c;目前从事互联网软硬件相关工作。作为强迫症患者&#xff0c;一直对自动化部署非常痴迷&#xff0c;个人认为全自动部署最重要的就是稳定可靠&#xff0c;经…

java家电网站_基于jsp的家电销售网-JavaEE实现家电销售网 - java项目源码

基于jspservletpojomysql实现一个javaee/javaweb的家电销售网, 该项目可用各类java课程设计大作业中, 家电销售网的系统架构分为前后台两部分, 最终实现在线上进行家电销售网各项功能,实现了诸如用户管理, 登录注册, 权限管理等功能, 并实现对各类家电销售网相关的实体进行管理…