django学习入门系列之第二点《案例2:用户注册改进》

文章目录


更改提交数据类型

python 复制代码
#methods - 提交方式 
#methods = ['提交的数据类型']
#GET - 直接提交
#POST - 藏起来提交
@app.route('/register',methods = ['GET'])

提交数据/返回数据到后台

html 复制代码
<!-- 需要返回什么数据就用from把数据包裹起来 -->
<!-- method - 提交的方式 -->
<!-- action - 提交地址 -->
<!-- 如果不写action,则默认向当前地址提交数据  -->
#<from method = "get" action = "提交地址">
 
<from>
需要返回的内容
</from>
html 复制代码
    <form method="get" action="xx/xx/xx">
        # 注意input的一定要有name,不然发不出去
        用户名:  <input type="text" name="uu">
        用户密码: <input type="password" name="pp">
    <input type="button" value="提交" >
    <input type="submit" value="提交" >
    </form>

传回来的数据 [404 Not Found](http://127.0.0.1:5000/xx/xx/xx?uu=123&pp=2345)

页面上的数据,想要提交到后台:

  • form标签包裹要提交的数据标签

    • 提交方式:method="get"
    • 提交的地址:action="/xx/xxx/xx"
    • 在form标签里面必须有一个submit标签
  • 在form里面的一些标签:input/select/textarea

界面接收数据

  1. 首先确定form中返回的网址

    html 复制代码
    <form method="get" action="xx/xx/xx">

    这里返回的网址是xx/xx/xx

  2. 在主界面新建一个网站,网站地址为form中需要返回的地址

    python 复制代码
    @app.route('/xx/xx/xx')
    def xxxx():
        return "注册成功"

    当用户点击提交的时候会移动到这个网址,同时返回一个注册成功的的界面

  3. 同时需要接收用户返回的值

    python 复制代码
    #request 用来接收表单中返回的GET数据
    from flask import Flask, render_template, request
    
    @app.route('/xx/xx/xx',methods = ['get'])
    def xxxx():
        print(request.args)
        return "注册成功"
    
    #返回打印出来的值
    #ImmutableMultiDict([('uu', '123324'), ('pp', '345345')])
  4. 如果是post请求的话

html 复制代码
<!-- html端只用改form中的method,注意是小写post -->
<form method="post" action="xx/xx/x">
python 复制代码
#app中的methods要改成POST,注意是大写
#打印出来的是request.form,和GET打印的不一样
@app.route('/xx/xx/x',methods = ['POST'])
def xxxx():
    print(request.form)
    return "注册成功"
  1. 综合案例1

将案例1的标签返回

注:能返回的只有用户可以输入的标签

python 复制代码
from flask import Flask, render_template, request
app = Flask(__name__)

@app.route('/register',methods = ['GET'])
def index():
    return render_template('register.html')

@app.route('/xx/xx/x',methods = ['POST'])
def xxxx():
    print(request.form)
    return "注册成功"
if __name__ == '__main__':
    app.run()
html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用户登记</title>
</head>
<body>
<form method="post" action="xx/xx/x">
    <div>用户名:  <input type="text" name="uu"></div>
    <div>用户密码: <input type="password" name="pp"></div>
    <div>
        性别:
        <input type="radio" name="n1" value="男">男
        <input type="radio" name="n1" value="女">女
    </div>
    <div>
        爱好:
        <input type="checkbox" name="hobby" value="篮球">篮球
        <input type="checkbox" name="hobby" value="足球">足球
        <input type="checkbox" name="hobby" value="羽球">羽球
        <input type="checkbox" name="hobby" value="铅球">铅球
    </div>
    <div>
        城市:
        <select name="city">
            <option value="北京">北京</option>
            <option value="上海">上海</option>
            <option value="广州">广州</option>
            <option value="深圳">深圳</option>
        </select>
    </div>
<div>
<select name = "skill" multiple>
    <option value="吃饭">吃饭</option>
    <option value="睡觉">睡觉</option>
    <option value="打豆豆">打豆豆</option>
    <option value="玩游戏">玩游戏</option>
</select>
 </div>
<div>
    <textarea name="more"></textarea>
</div>
    <input type="submit" value="提交" >

 </form>
</body>
</html>
  • 如果是单独接收数据
python 复制代码
#POST格式
#接收单个名字中的单个数据用request.form.get
#接收单个名字中的多个数据用request.form.getlist
@app.route('/xx/xx/x', methods=['POST'])
def xxxx():
    print(request.form)
    # 单独接收数据
    uu = request.form.get("uu")
    pp = request.form.get("pp")
    n1 = request.form.get("n1")
    hobby = request.form.getlist("hobby")
    city = request.form.get("city")
    skill = request.form.get("skill")
    more = request.form.get("more")

    print(uu, pp, n1, hobby, city, skill, more)
    return "注册成功"

所返回的信息

ImmutableMultiDict([('uu', '123'), ('pp', 'qwe'), ('n1', '男'), ('hobby', '篮球'), ('hobby', '足球'), ('city', '广州'), ('skill', '吃饭'), ('skill', '睡觉'), ('skill', '打豆豆'), ('more', 'text')])

123 qwe 男 ['篮球', '足球'] 广州 吃饭 text
  • 综合案例1改

    将两个函数整合到一起(相似的时候一般要整合在一起,逻辑不同的不建议整合在一起)

python 复制代码
from flask import Flask, render_template, request

app = Flask(__name__)

# 这样既可以判断是GET还是POST
@app.route('/register', methods=['GET', 'POST'])
def index():
    # 如果发送的是GET则返回xx数据
    if request.method == "GET" :
        return render_template('register.html')
    else:
        print(request.form)
        # 单独接收数据
        uu = request.form.get("uu")
        pp = request.form.get("pp")
        n1 = request.form.get("n1")
        hobby = request.form.getlist("hobby")
        city = request.form.get("city")
        skill = request.form.get("skill")
        more = request.form.get("more")

        print(uu, pp, n1, hobby, city, skill, more)
        return "注册成功"

if __name__ == '__main__':
    app.run()
html 复制代码
<!-- html那里只用改地址就行了 -->

<form method="post" action="/register">

总结

  1. 称呼

    - 浏览器能够识别的标签 (非专业说法)
    - HTML标签
    
    什么是HTML?超文本传输语音(与浏览器搭配)
    
  2. HTML标签(默认格式样式、以后通过手段可以修改)

  3. HTML标签与编程语言无关

    • java + HTML
    • c# + HTML
    • php + HTML
    • python + HTML
  4. 提醒:HTML标签比较多,不必逐一学会

往期回顾

1.【快速开发网站】
2.【浏览器能识别的标签1】
3.【浏览器能识别的标签2】
4.【浏览器能识别的标签3】
5.【浏览器能识别的标签4】
6.【案例1:用户注册】

相关推荐
毕小宝1 分钟前
TensorFlow 的基本概念和使用场景
人工智能·python·tensorflow
洛阳泰山9 分钟前
Llamaindex 使用过程中的常见问题 (FAQ)
java·服务器·数据库·python·llm·rag·llamaindex
敲代码不忘补水10 分钟前
Python 项目实践:文件批量处理
服务器·开发语言·python·项目实践
不修×蝙蝠10 分钟前
eclipse使用 笔记02
前端·笔记·后端·eclipse
梦城忆15 分钟前
Web开发:Thymeleaf模板引擎
前端
low神19 分钟前
前端进阶,使用Node.js做中间层,实现接口转发和服务器渲染
服务器·前端·javascript·中间件·node.js·前端面试题
未 顾25 分钟前
JavaWeb纯小白笔记02:Tomcat的使用:发布项目的三种方式、配置虚拟主机、配置用户名和密码
java·笔记·tomcat
问道飞鱼30 分钟前
每日学习一个数据结构-哈夫曼树Huffman Tree
数据结构·学习·霍夫曼树
Deryck_德瑞克30 分钟前
mysql笔记—sql性能分析
笔记·sql·mysql
_.Switch32 分钟前
Python Web 开发中的性能优化策略(一)
开发语言·前端·python·性能优化·django·flask·fastapi