Django之form表单相关操作

摘要

本章讲述了form表单的action参数,以及前后端简单传递数据的方式:form表单中的method参数,input标签中的name参数,GET/POST请求,以及后端接收数据的方式:request.method方法

form表单

form表单的action参数

# 控制数据提交的地址
'''
	1. action='',默认向当前地址发送数据
	2. action='https://www.baidu.com/'   完整地址,向所写地址发送数据
	3. action='/index/'   路由地址,向当前服务端的index地址提交数据
		127.0.0.1/index/
'''

form表单的method参数

# 控制数据提交的方法
'''
  get  默认,向别人请求数据(可以携带一些要求,如一些筛选条件)
            携带数据方式:
              URL?aaa=bbb&xxx=ccc  使用?符号携带,使用&符号隔开多个条件
                限制:
                  1. 携带的数据的大小有限制,HTTP协议规范没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制。
                  对于服务器:
                    Apache (Server):最大url长度为8,192个字符。
                    Microsoft Internet Information Server(IIS):最大url的长度为16,384个字符。
                  对于浏览器:
                    Microsoft Internet Explorer (Browser):URL的最大限制为2,083个字符,超过限制提交按钮将失效。
                    Firefox (Browser):URL的长度限制为65,536个字符
                    Safari (Browser):URL最大长度限制为 80,000个字符。
                    Opera (Browser):URL最大长度限制为190,000个字符。
                    Google (chrome):URL最大长度限制为8,182个字符。
                  2. 携带的数据因为是明文,所以不能有敏感数据
				
  post  向别人提交数据
            携带数据的方式: 请求体
              请求体携带的数据安全性较高,并且大小没有限制
'''

request.method方法

简介

request.method			   获取请求方式,结果是纯大写的字符串数据
	GET\POST
request.POST			   获取请求体中携带的数据
	request.POST.get()	   获取列表最后一个数据值
	request.POST.getlist()	   获取整个列表数据,以列表形式返回
request.GET			   获取请求中url中问号后面携带的数据,无论GET\POST都会传递数据
	request.GET.get()	   获取列表最后一个数据值
	request.GET.getlist()	   获取整个列表数据,以列表形式返回

get请求传递数据

# input标签添加name属性值
    <div class="container">
        <div class="row">
            <h1 class="text-center">用户登录</h1>
            <div class="col-md-6 col-md-offset-3">
                <form action="">
                    <p>username:
                        <input type="text" class="form-control" name="name">
                    </p>
                    <p>password:
                        <input type="password" class="form-control" name="pwd">
                    </p>
                    <input type="submit" class="btn btn-block btn-success">
                </form>
            </div>
        </div>
    </div>

# 在浏览器username处填写Tom,在password处填写123
# 此时提交表单后,浏览器的url会变为:http://127.0.0.1:8000/login/?name=Tom&pwd=123

post请求传递数据

    <div class="container">
        <div class="row">
            <h1 class="text-center">用户登录</h1>
            <div class="col-md-6 col-md-offset-3">
                <form action="" method="post">  # 修改method传递方式
                    {% csrf_token %}
                    <p>username:
                        <input type="text" class="form-control" name="name">
                    </p>
                    <p>password:
                        <input type="password" class="form-control" name="pwd">
                    </p>
                    <input type="submit" class="btn btn-block btn-success">
                </form>
            </div>
        </div>
    </div>

现在的问题是,后端如何知道用户发送的是get请求还是post请求?方法如下:

def login_func(request):
    # 如果问号后面携带数据,可使用request.GET获取,例如url为:http://127.0.0.1:8000/login/?name=jack
    print(request.GET)  # 返回: <QueryDict: {'name': ['jack']}>
    if request.method == 'GET':
        return render(request, 'login.html')
    elif request.method == 'POST':
        print(request.POST)  # 返回 <QueryDict: {'name': ['jack'], 'pwd': ['123']}>
        name = request.POST.get('name')  # 返回jack
        pwd = request.POST.get('pwd')   # 返回123
        print(name, pwd)
        print(request.POST.getlist('name'))  # 返回['Jack', 'Rose', 'Maria']
        return HttpResponse('The post get the data')
# 如果要返回多个数据,需要一次性接收(checkbox这种),可以使用下面的方法:
print(request.POST.getlist('name'))  # 返回['Jack', 'Rose', 'Maria']

GET/POST实际应用,简单登录方式实现

# 前端页面使用上面的html代码,在此不再重复
# 后端代码如下
def login_func(request):
    if request.method == 'POST':
        name = request.POST.get('name')
        pwd = request.POST.get('pwd')
        # 注意,此种方法收到的前端数据都是字符串
        if name == 'jack' and pwd == '123':
            return HttpResponse('用户登录成功')
        return HttpResponse('用户名或密码错误')
    return render(request, 'login.html')

总结

可以看到,django学会了传输数据的简单方式后,就可以实现前后端数据的传输,但是如果要实现数据交互,就需要使用数据库了,后面就需要开始学习django与数据库如何交互的。

posted @   树苗叶子  阅读(158)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类
点击右上角即可分享
微信分享提示