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

发布于:2024-06-17 ⋅ 阅读:(19) ⋅ 点赞:(0)


更改提交数据类型

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

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

<!-- 需要返回什么数据就用from把数据包裹起来 -->
<!-- method - 提交的方式 -->
<!-- action - 提交地址 -->
<!-- 如果不写action,则默认向当前地址提交数据  -->
#<from method = "get" action = "提交地址">
 
<from>
需要返回的内容
</from>
    <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中返回的网址

    <form method="get" action="xx/xx/xx">
    

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

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

    @app.route('/xx/xx/xx')
    def xxxx():
        return "注册成功"
    

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

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

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

将案例1的标签返回

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

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()

<!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>
  • 如果是单独接收数据
#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改

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

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那里只用改地址就行了 -->

<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:用户注册】