Django框架学习10-表单请求

1.get请求

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文章提交界面</title>
</head>
<body>
<form action="/result" method="get">
    文章标题:<input type="text" name="title">
    文章内容:<input type="text" name="content">
    <br>
    <input type="submit" value="提交">
</form>
</body>
</html>

aritcle.html

def article(request):
    return render_to_response("aritcle.html")

def result(request):
    print(request.method)#获取请求方法
    print(request.GET["title"])#获取请求参数,title是input标签中的名字,不存在会报错
    print(request.GET.get("content",None))#获取请求参数,content是input标签中的名字,不存在会报错
    return HttpResponse("提交完成")

接收函数result,点击提交按钮后,跳转显示提交完成,可以获取上一步得到上一步的参数

获取的请求方法参数和请求方法类型

2.post方法获取提交参数与get方法类似。

用户注册

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册页面</title>
</head>
<body>
<h1>新用户注册!</h1>
<form action="" method="post">
    {% csrf_token %}
      <p>
        用户 名:<input type="text"  name="username", required="required"> * {{rename}}
      </p>
      <p>
         密   码:<input type="text"  name="password", required="required"> *
    </p>
   <p>
         手机号码:<input type="text"  name="phone">
    </p>
    <p>
          <input type="submit" value="注册">
    </p>
</form>

</body>
</html>
def regist(request):
    if request.method == "POST":
        username = request.POST.get("username", None)#获取用户输入
        password = request.POST.get("password")
        phone = request.POST.get("phone")
        user = User1.objects.filter(name=username)#先从数据库查询是否已经注册过了
        print(user)
        if user:
            res = "%s用户名已被注册,请更换一个" % username
            return render(request, 'regist.html', {'rename': res})
        else:
            user1 = User1()
            user1.name = username
            user1.password = make_password(password)#密文报存密码
            user1.phone = phone
            user1.save()  #保存到数据库
            return render_to_response("login.html")
    return render_to_response("regist.html")

登录

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录页面</title>
</head>
<body>
<h1>欢迎登录!</h1>
<form action="my" method="post">
    {% csrf_token %}
      <p>
        用户名:<input type="text"  name="username", required="required"> *
      </p>
      <p>
         密码:<input type="text"  name="password", required="required"> *
    </p>

    <p>
          <input type="submit" value="登录">
    </p>
    {{info}}
</form>

</body>
</html>
def login(request):
    if request.method=="POST":
        username = request.POST.get("username", None)
        password = request.POST.get("password")
        user = User1.objects.filter(name=username).first()
        result = check_password(password,user.password)#####校验密码
        print(user)
        if user:
            return HttpResponse("登录成功")
        else:
            return render_to_response("login.html",{"info":"用户名或密码错误"})
    else:
        return render_to_response("login.html",{"info":""})

2.跨站点伪造请求--csrf

{% csrf_token %},post请求中表单提交时防止跨站点伪造请求,增加这句话。

Django预防CSRF攻击的方法是在用户提交的表单中加入一个csrftoken的隐含值,这个值和服务器中保存的csrftoken的值相同,这样做的原理如下:

1、在用户访问django的可信站点时,django反馈给用户的表单中有一个隐含字段csrftoken,这个值是在服务器端随机生成的,每一次提交表单都会生成不同的值

2、当用户提交django的表单时,服务器校验这个表单的csrftoken是否和自己保存的一致,来判断用户的合法性

3、当用户被csrf攻击从其他站点发送精心编制的攻击请求时,由于其他站点不可能知道隐藏的csrftoken字段的信息这样在服务器端就会校验失败,攻击被成功防御

3.密码加解密
密码如果明文存储到数据库的话不太安全,一般会加密存储,django里面提供了一套加密方法make_password,解密用check_password,需先导入

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值