python测试开发django(23)--表单提交之post注册案例

前言

一个网站上新用户注册,会写个注册页面,如果用django写个注册页面的流程呢?

本篇以post请求示例,从html页面上输入用户注册信息,提交到后台处理数据,然后传参数据到users数据库表里面。

注册页面html

注册页面设计,需输入用户名(必填)、密码(必填)、邮箱(非必填),点注册按钮提交表单

templates/register.html

<!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" id="id_username" name="username",required="required"> * {{rename}}

    </p>
    <p>
        密码:<input type="text" id="id_username" name="password",required="required"> *
    </p>
    <p>
        注册邮箱:<input type="text" id="id_username" name="mail">
    </p>
    <p>
        <input type="submit" value="注册">
    </p>
</form>
</body>
</html>

 注册成功后,希望能跳转到用户登录页面,所以还需要写个登录页面的html,登录逻辑暂时没写

templates/login.html

<!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" id="id_username" name="username",required="required">*
    </p>
    <p>
        密码:<input type="text" id="id_username" name="password",required="required">*
    </p>
    <p>
        <input type="submit" value="登录">
    </p>
</form>
</body>
</html>   

post请求form下面加个{% csrf_token %}防止跨站点伪造请求

csrf_token

CSRF, Cross Site Request Forgery, 跨站点伪造请求。

举例来讲,某个恶意的网站上有一个指向你的网站的链接,如果某个用户已经登录到你的网站上了,那么当这个用户点击这个恶意网站上的那个链接时,就会向你的网站发来一个请求,你的网站会以为这个请求是用户自己发来的,其实呢,这个请求是那个恶意网站伪造的。

django 第一次响应来自某个客户端的请求时,会在服务器端随机生成一个 token,把这个 token 放在 cookie 里。然后每次 POST 请求都会带上这个 token,这样就能避免被 CSRF 攻击。

  • 在返回的 HTTP 响应的 cookie 里,django 会为你添加一个 csrftoken 字段,其值为一个自动生成的 token
  • 在所有的 POST 表单时,必须包含一个 csrfmiddlewaretoken 字段 (只需要在模板里加一个 tag, django 就会自动帮你生成)
  • 在处理 POST 请求之前,django 会验证这个请求的 cookie 里的 csrftoken 字段的值和提交的表单里的 csrfmiddlewaretoken 字段的值是否一样。如果一样,则表明这是一个合法的请求,否则,这个请求可能是来自于别人的 csrf 攻击,返回 403 Forbidden.
  • 在所有 ajax POST 请求里,添加一个 X-CSRFTOKEN header,其值为 cookie 里的 csrftoken 的值

视图与urls

接下来写个视图函数接收register.html页面的请求参数,如歌写如users表,这张表前面已经创建过了,数据如下图。

 views.py

#coding:utf-8
from django.shortcuts import render
from django.http import HttpResponse
from .models import Users
# Create your views here.
def register(request):
    rs=""
    if request.method=="POST":
        username=request.POST.get('username')
        pwd=request.POST.get('password')
        mail=request.POST.get('mail')

        #先查询数据库是否有此用户名
        euser=Users.objects.filter(user_name=username)
        if euser:
            rs="{}用户已被注册".format(username)
            return render(request,'register.html',{'rename':rs})
        else:
            #如果没被注册,插入数据库
            #方式1
            user=Users()
            user.user_name=username
            user.pwd=pwd
            user.mail=mail
            user.save()
            return render(request,'login.html')
    return render(request,'register.html')

def login(request):
    return render(request,'login.html')

 urls.py访问地址

#helloworld/helloworld/urls.py
from django.conf.urls import url
from . import testdb
from xjyn import views

urlpatterns=[
   url('^r/',views.register),
   url('^login/',views.login),
]

 注册页面

 

 如果用户名已经注册过,页面会给出提示,新用户注册成功后会跳转到登录页面。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值