前言

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

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

注册页面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页面的请求参数,如何写入User表,这张表前面已经创建过了,数据如下图。

关于写入User表操作参考前面一篇https://www.cnblogs.com/yoyoketang/p/10333417.html

# views.py
from django.shortcuts import render
from hello.models import User # Create your views here. def register(request):
'''注册页面'''
res = ""
if request.method == "POST":
username = request.POST.get('username')
psw = request.POST.get('password')
mail = request.POST.get('mail') # 先查询数据库是否有此用户名
user_lst = User.objects.filter(user_name=username)
if user_lst:
# 如果已经注册过,就给个提示
res = "%s用户已被注册" % username
return render(request, 'register.html', {'rename': res}) else:
# 如果没被注册,插入数据库 # 第一种写法 -- 推荐
user = User()
user.user_name = username
user.psw = psw
user.mail = mail
user.save() # 第二种写法
# user = User(user_name=username,
# psw = psw,
# mail = mail,
# )
# user.save()
return render(request, 'login.html', {'rename': res})
return render(request, 'register.html') def login(request):
'''登录页面'''
return render(request, 'login.html')

urls.py访问地址

from django.conf.urls import url
from hello import views urlpatterns = [
# 新增用户
url(r'^register/', views.register),
url(r'^login/', views.login),
]

注册页面

浏览器输入地址:http://localhost:8000/register/

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

python测试开发django-25.表单提交之post注册案例的更多相关文章

  1. [转]django自定义表单提交

    原文网址:http://www.cnblogs.com/retop/p/4677148.html 注:本人使用的Django1.8.3版本进行测试 除了使用Django内置表单,有时往往我们需要自定义 ...

  2. UI标签库专题三:JEECG智能开发平台 FormValidation(表单提交及验证标签)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/zhangdaiscott/article/details/28484209  自己定义弹出框提示 ...

  3. python接口自动化17-multipart/form-data表单提交

    前言 multipart/form-data这种格式官方文档给的参考案例比较简单,实际情况中遇到会比较复杂,本篇讲解multipart/form-data的表单如何提交,非图片上传 禅道提交bug 1 ...

  4. python测试开发django-26.表单提交之post登录案例

    前言 注册和登录功能实现都是post请求接口,只不过注册是往数据库插入数据,登录是从数据库里面查询数据. 本篇接着上一篇写个简单的登录页面请求,用户注册时密码加密存储,用户登录时候对输入的密码校验. ...

  5. python测试开发django-72.删除表后如何重新生成表

    前言 在使用ORM建表的时候,由于需要对数据库表的重新设计,需要删除原表,并通过Django的ORM功能重新同步表. 删除表之后,发现用 makemigrations 和 migrate 无法生成新的 ...

  6. python http 请求 响应 post表单提交

    1. 查看请求 响应情况 print(response.text) print(response.headers) print(response.request.body) print(respons ...

  7. python运维开发(十九)----Django后台表单验证、session、cookie、model操作

    内容目录: Django后台表单验证 CSRF加密传输 session.cookie model数据库操作 Django后台Form表单验证 Django中Form一般有2种功能: 1.用于做用户提交 ...

  8. Django初体验(一):自定义表单提交

    注:本人使用的Django1.8.3版本进行测试 除了使用Django内置表单,有时往往我们需要自定义表单.对于自定义表单Post方式提交往往会带来由CSRF(跨站请求伪造)产生的错误"CS ...

  9. input file 在开发中遇到的问题 类似ajax form表单提交 input file中的文件

    最近在做项目的过程中遇到个问题,在这里做个记录防止日后忘记 现今的主流浏览器由于ajax提交form表单无法把文件类型数据提交到后台,供后台处理,可是开发中由于某些原因又不得不用ajax提交文件, 为 ...

随机推荐

  1. Canvas 3D球形文字云动画特效

    Canvas 3D球形文字云动画特效 效果图: 代码如下,复制即可使用: (适用浏览器:360.FireFox.Chrome.Opera.傲游.搜狗.世界之窗. 不支持Safari.IE8及以下浏览器 ...

  2. LeetCode(10):正则表达式匹配

    Hard! 题目描述: 给定一个字符串 (s) 和一个字符模式 (p).实现支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符. '*' 匹配零个或多个前面的元素. 匹配应该覆盖整 ...

  3. java 异常 throw

    throw UnsupportedOperationException(); //没有支持的操作NoSuchElementException(); //没有这样的元素

  4. tensorflow函数(2)

    并行计算能让代价大的算法计算加速执行,TensorFlow也在实现上对复杂操作进行了有效的改进.大部分核相关的操作都是设备相关的实现,比如GPU.下面是一些重要的操作/核: 操作组 操作 Maths ...

  5. 采用MiniProfiler监控EF与.NET MVC项目(Entity Framework 延伸系列1)(转)

    前言 Entity Framework 延伸系列目录 今天来说说EF与MVC项目的性能检测和监控 首先,先介绍一下今天我们使用的工具吧. MiniProfiler~ 这个东西的介绍如下: MVC Mi ...

  6. java学习之租车系统

    ​背景:有三种类型的车供给用户来租用​ ​要求:控制台用户交互界面,根据用户需求输出租车价格,结果如下: 创建租车类主要设计过程: 创建租车类 创建Car父类,包含四种属性成员,重写构造方法 创建三种 ...

  7. Android- SharedPreferences 使用详解

    Android-SharedPreferences 使用详解 参考 https://developer.android.google.cn/reference/android/content/Shar ...

  8. Android 前台服务

    Android 前台服务 学习自 https://blog.csdn.net/guolin_blog/article/details/11952435#t3 前台服务漫谈 我们之前学习的Service ...

  9. luogu [TJOI2007]线段

    题目链接 luogu [TJOI2007]线段 题解 dp[i][0/1]第i行在左/右端点的最短路 瞎转移 代码 #include<bits/stdc++.h> using namesp ...

  10. Shape流动效果

    <Window x:Class="MvvmLight1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/ ...