Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >来玩Play框架04 表单

来玩Play框架04 表单

作者头像
Vamei
发布于 2018-01-18 08:20:49
发布于 2018-01-18 08:20:49
96800
代码可运行
举报
文章被收录于专栏:Vamei实验室Vamei实验室
运行总次数:0
代码可运行

表单(form)是最常见的从客户往服务器传递数据的方式。Play框架提供了一些工具。它们可以从表单中提取数据,验证提交数据的合法性,或者在视图中显示表单。我先来介绍最简单的使用表单提交数据的方式。 

增加表单

我可以用纯粹html的方式产生一个表单。在app/views下增加模板form.scala.html:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html>
  <body>
    <form method="POST" action="/postForm">
      <input type="text" name="content"></input>
      <input type="submit"></input>
    </form>
  </body>
</html>

在Application控制器中,增加一个动作form(),显示模板:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static Result form() {
    return ok(views.html.form.render());
}

在routes中增加导航

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET     /form                       controllers.Application.form()

页面如下:

数据提取

在文本框中输入任意字符,点击submit后,表单将以POST方法提交到/postForm这一URL。增添负责处理该URL的动作,Application.postForm()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static Result postForm() {
    DynamicForm in   = Form.form().bindFromRequest();
    String result    = in.get("content");
    return ok(result);
}

DynamicForm和Form都来自play.data。Form.form().bindFormRequest()从请求中提取表单信息,并放入到DynamicForm类型的in对象中。

我上面用get()方法,来提取表单中不同名字的输入栏。比如上面的"content"。postForm()动作把表单中填写的内容直接显示。

增加routes记录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
POST    /postForm                   controllers.Application.postForm()

在/form的页面下输入任意字符串并提交,查看效果。

我介绍了表单最基本的使用方式。下面了解Play框架提供的其它的表单工具。

表单对象

在动作内部,可以创建一个对象来指代表单。表单的每个输入栏为表单对象的一个属性。我可以通过增加标注(annotation)的方法,验证表单的输入(Form Validation)。

首先修改app/views/form.scala.html

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html>
  <body>
    <form method="POST" action="/postForm">
      <label>Email</label>
      <input type="email" name="email">
      <label>Password</label>
      <input type="password" name="password">
      <label>Comment</label>
      <input type="text" name="comment">
      <input type="submit">
    </form>
  </body>
</html>

这个表单有三个输入栏,名字分别为email, password和comment。

创建app/util/文件夹,在其中创建User.java。User类用于在Play内部指代上面的表单:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package util;

import play.data.validation.Constraints.Email;
import play.data.validation.Constraints.Required;

public class User {
    @Email
    public String email;
    @Required
    public String password;
    public String comment;
}

User类指代一个表单的数据。我还为两个属性增加了标注。Play服务器可以据此验证输入的合法性。比如@Email的限定就要求输入为"*@*"的形式。@Required则要求输入栏不为空。如果违反这些限定,那么Play将抛出异常。

修改动作postForm()。User类的对象user用来保存表单数据。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static Result postForm() {
    Form<User> userForm = Form.form(User.class);
    User user = userForm.bindFromRequest().get();
    return ok(user.email + " " + user.password);
}

最后的ok()中调用了表单对象中保存的数据。 

分别输入合法和不合法的数据,观察Play返回的页面。

表单模板

我上面手动创建模板中的表单,并保持视图中的表单和表单对象一致。我还可以在模板中直接调用表单对象。这样做,能让视图中的表单和表单对象自动的保持一致。

修改form.scala.html为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@(userForm: Form[util.User])

<!DOCTYPE html>
<html>
  <body>
    @helper.form(action = routes.Application.postForm()) {
      @helper.inputText(userForm("email"))
      @helper.inputPassword(userForm("password"))
      @helper.inputText(userForm("comment"))
      <input type="submit">
    }
  </body>
</html>

这里使用了Play所提供的helper工具。helper可以在表单中增加表单form,再加入不同类型的输入栏,比如inputText和inputPassword。

修改原有的动作form()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static Result form() {
    Form<User> userForm = Form.form(User.class);
    return ok(views.html.form.render(userForm));
}

这里,表单对象作为参数传递给模板。最后的html页面中的表单,将由Play自动生成。

总结

表单

数据提交

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2014-05-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
七日Python之路--第十一天
但是,感觉还是不声明,直接使用默认的搜索路径比较好。当不进行声明时,默认搜索路径是相应的app应用目录下的‘templates’文件夹下。
lpe234
2020/07/27
3610
来玩Play框架06 用户验证
用户验证(User Authentification)复合的使用Play框架的数个功能,包括前面已经了解的表单和数据库,以及这篇文章里要提到的加密和会话。根据应用或站点的复杂程度,用户验证也可以随之变化。这里将介绍用户验证的一个基本实现方式。 加密 为了信息安全,用户密码需要加密,而不是保存为明文。Bcrypt算法可以对明文密码进行哈希(Hash)转换。我保存在数据库中的密码,是经过转换后的文本。 JBcrypt是一个外部的包,提供了Bcrypt功能。要在build.sbt中说明这个包的来源和版本: nam
Vamei
2018/01/18
1.2K0
来玩Play框架06 用户验证
【Python全栈100天学习笔记】Day44 Web表单介绍及使用
我们继续来完成上一章节中的项目,实现“用户注册”和“用户登录”的功能,并限制只有登录的用户才能为老师投票。Django框架中提供了对表单的封装,而且提供了多种不同的使用方式。
天道Vax的时间宝藏
2022/04/02
8780
【Python全栈100天学习笔记】Day44 Web表单介绍及使用
Django用户登录与注册系统
一、创建项目 1.1.创建项目和app django-admin startproject mysite_login python manage.py startapp login 1.2.设置时区和语言 Django默认使用美国时间和英语,在项目的settings文件中,如下所示: LANGUAGE_CODE = 'en-us' TIME_ZONE = 'UTC' USE_I18N = True USE_L10N = True USE_TZ = True 我们把它改为亚洲/上海时间和中文 LAN
zhang_derek
2018/04/11
11.5K0
Django用户登录与注册系统
Play For Scala 开发指南 - 第8章 用户界面
Twirl 是 Play 内置的模板引擎,负责数据层展示与用户行为收集。Twirl 被设计成一个独立的模块,可以脱离 Play 环境单独使用。Twirl 采用Scala作为底层模板语言,所以你无需学习额外的语法便可以轻松上手。
joymufeng
2019/03/12
1.5K0
来玩Play框架05 数据库
数据库是整个站点的数据储藏室。用户提交的数据可以存储在数据库中,以便未来使用。Play可以通过JDBC和数据库通信。我讲介绍Play和mysql数据库的连接。  Play 2.*版本的默认操作数据库的方式是通过Ebean。Play提供Finder这一帮助类型,可以实现一些简单的数据库查询。 数据库准备 在mysql中增加数据库testing。增加用户"player",密码为"player"。为用户player增加适当的权限。 CREATE DATABASE testing DEFAULT CHARACTER
Vamei
2018/01/18
1K0
来玩Play框架05 数据库
来玩Play框架07 静态文件
Play框架的主要功能是提供动态响应的内容。但一个网络项目中必然有大量的静态内容,比如图片、Javascript文件、CSS文件等。我下面介绍如何在Play项目中加入静态文件。 默认路径 Play项目的静态文件一般存储在根目录下的public文件夹。新建Play项目时,routes文件会有下面的默认记录: # Map static resources from the /public folder to the /assets URL path GET /assets/*file
Vamei
2018/01/18
9990
来玩Play框架07 静态文件
H5 App实战六:H5 App表单处理与用户输入
推荐文章:使用Python实现智能食品安全追溯系统的深度学习模型-腾讯云开发者社区-腾讯云
china马斯克
2024/11/26
1920
Python Day18 Django
这样,下次再访问时通过获取cookie中的"sessionid"的值就可以得到所对应的session-data
py3study
2020/01/14
1.2K0
【玩转全栈】----基于ModelForm完成用户管理页面
在学完前面的部门管理案例后,自己独立写出个用户管理应该不难,基本逻辑和大致代码都和前面一样,大家可以自己试试。
用户11404404
2025/01/24
710
【玩转全栈】----基于ModelForm完成用户管理页面
Play Scala 2.5.x - Play Web开发基础
介绍 本文的目标是通过一个用户登录示例,简要的介绍使用Play进行Web开发的基本流程。本文并不会手把手教你如何创建一个Play应用,而是通过核心的代码片段传递Play的一些设计理念,为不熟悉Play框架的同学提供一个快速了解的途径。 创建登录Controller 在controllers目录下创建ApplicationController类: package controllers import play.api.mvc._ class ApplicationController extends Con
joymufeng
2018/05/17
1.4K0
基于Django的电子商务网站开发(连载10)
用户信息模块包括“用户信息的注册”“用户登录”“显示用户信息”和“用户密码的修改”。其中“用户信息的注册”与“用户登录”在本书第2章进行了详细地描述,这一章将进行系统地归纳与优化。数据模型如下。
顾翔
2019/12/11
8570
基于Django的电子商务网站开发(连载10)
Django 之Form表单的常用操作
普通Form表单的提交 <!-- name:index.html --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="/" method="post"> <p>账号:<input type="text" name="username"><span>{{ error.username }}<
王瑞MVP
2022/12/28
1.2K0
python测试开发django-109.ModelForm模型表单的使用
django的表单有2种:forms.Form 和 forms.ModelForm。ModelForm顾名思义是将模型和表单结合起来,这个功能是非常强大的!
上海-悠悠
2021/07/22
1.2K0
23.Django基础
Django基本配置 Python的WEB框架有Django、Tornado、Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM、模型绑定、模板引擎、缓存、Session等诸多功能 1.安装 # windows 直接用pip进行安装 pip install django # 生成的django文件加入到系统环境变量 2.创建并启动 创建 django-admin startproject mysite 运行 python manage.py runserver
zhang_derek
2018/04/11
9470
23.Django基础
Django实战-用户注册和登陆系统
每当我们开始一个新项目的时候,通常都会搭建一个全新、独立、隔离的项目环境,这样做的好处自然不必多说。有很多种建立项目虚拟环境的工具,使用比较普遍的是Python中的virtualenv。安装好virtualenv工具后,进入想要放置的项目文件夹,建立一个虚拟环境,激活环境,安装django。
菲宇
2019/07/31
7.8K0
Django实战-用户注册和登陆系统
基于bootstrap的web登陆实例
前情提要 之前已经搭好的springMVC+myBatis项目骨架,详情请看–>传送门。
bear_fish
2018/09/19
3.2K0
基于bootstrap的web登陆实例
Django 常用的Form表单
Django最强大的部分之一是自动管理界面。它从模型中读取元数据,以提供一个快速的,以模型为中心的界面,受信任的用户可以在其中管理您网站上的内容。管理员的建议用法仅限于组织的内部管理工具。它并非旨在构建您的整个前端。
王瑞MVP
2022/12/28
1.3K0
【ASP.NET Core 基础知识】--MVC框架--Views和Razor语法
在ASP.NET Core的MVC(Model-View-Controller)框架中,View 扮演着呈现用户界面的角色。View负责展示应用程序的数据给用户,并接收用户的输入。它与Model和Controller协同工作,通过模型绑定从Controller获取数据,然后使用Razor语法或其他视图引擎将数据呈现为用户可见的HTML。
喵叔
2024/01/11
9650
django入门:Admin管理系统及表单(干货)
博客:https://www.jianshu.com/p/8cdf099e974f
陈宇明
2020/12/15
3.1K0
django入门:Admin管理系统及表单(干货)
相关推荐
七日Python之路--第十一天
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验