前言

注册和登录功能实现都是post请求接口,只不过注册是往数据库插入数据,登录是从数据库里面查询数据。

本篇接着上一篇写个简单的登录页面请求,用户注册时密码加密存储,用户登录时候对输入的密码校验。

登录页面

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>

视图与urls

查询数据库用户名和密码

# views.py
from django.shortcuts import render
from hello.models import User
from django.http import HttpResponse # Create your views here.
def login(request):
'''登录页面'''
if request.method == "GET":
return render(request, 'login.html')
if request.method == "POST":
# 先查询数据库是否有此用户名
username = request.POST.get('username')
psw = request.POST.get('password')
# 查询用户名和密码
user_obj = User.objects.filter(user_name=username, psw=psw).first()
if user_obj:
return HttpResponse('登陆成功')
else:
return HttpResponse('用户名或密码错误')

urls.py访问地址

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

密码加密make_password

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

from django.contrib.auth.hashers import make_password, check_password

views.py里面写入数据库时,加个make_password方法转下就行了

# 写入数据
user = User()
user.user_name = username
user.psw = make_password(psw) # 加密存储
user.mail = mail
user.save()

重新注册,存入的psw数据就是加密后的了

校验密码check_password

登录的时候,我们需要校验用户对应的密码,由于前面加密存储密码了,校验的时候,先获取用户输入的密码,然后读取数据库对应用户密码

再通过check_password函数校验密码,密码一致返回True, 不一致返回False。

# views.py
from django.shortcuts import render
from hello.models import User
from django.http import HttpResponse def login(request):
'''登录页面'''
if request.method == "GET":
return render(request, 'login.html')
if request.method == "POST":
# 先查询数据库是否有此用户名
username = request.POST.get('username')
psw = request.POST.get('password') # 查询用户名对应的密码
ret = User.objects.filter(user_name=username).first()
# 校验密码
is_psw_true = check_password(psw, ret.psw)
if is_psw_true:
return HttpResponse('登陆成功')
else:
return HttpResponse('用户名或密码错误')

python测试开发django-26.表单提交之post登录案例的更多相关文章

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

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

  2. python测试开发django-25.表单提交之post注册案例

    前言 一个网站上新用户注册,会写个注册页面,如果用django写个注册页面的流程呢? 本篇以post请求示例,从html页面上输入用户注册信息,提交到后台处理数据,然后传参数据到User数据库表里面 ...

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

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

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

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

  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 ORM的单表查询

    数据库开发-Django ORM的单表查询 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查询集 1>.查询集相关概述 查询会返回结果的集,它是django.db.mod ...

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

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

随机推荐

  1. 【AtCoder】ARC087

    C - Good Sequence 题解 用个map愉悦一下就好了 代码 #include <bits/stdc++.h> #define fi first #define se seco ...

  2. JMS(Java消息服务)

    JMS即Java消息服务(Java Message Service)应用程序接口是一个Java平台中关于面向消息中间件(MOM:指的是利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来 ...

  3. laravel Tinker报错 BadMethodCallException with message 'Call to undefined method Illuminate\Database\Query\Builder

    进行模型关联操作, php artisan tinker 执行 $user = App\Models\User::find(1) $user->followings()->attach([ ...

  4. 009.KVM配置调整

    一 内存CPU调整 1.1 增大虚拟机内存 [root@kvm-host ~]# virsh shutdown vm01-centos6.8 [root@kvm-host ~]# virsh edit ...

  5. [转]01分数规划算法 ACM 二分 Dinkelbach 最优比率生成树 最优比率环

    01分数规划 前置技能 二分思想最短路算法一些数学脑细胞? 问题模型1 基本01分数规划问题 给定nn个二元组(valuei,costi)(valuei,costi),valueivaluei是选择此 ...

  6. jquery获取系统当前时间

    //判断是否在前面加0function getNow(s) { return s < 10 ? '0' + s: s;} var myDate = new Date(); var year=my ...

  7. 谷歌浏览器测试工具应用Advanced REST client

    1.2 http post 在URL栏输入http://httpbin.org/post,选在”POST”类型,在”Payload”栏输入data,最后设置”Content-Type”

  8. BZOJ 3812主旋律

    求一个图中强联通图的个数. 一看就是容斥啦,但这种二进制高端操作还是学习一下Candy?dalao 注释在代码里 好久没更了... #include<bits/stdc++.h> usin ...

  9. BZOJ.3139.[HNOI2013]比赛(搜索 Hash)

    题目链接 不会搜索了.. DFS()中两个参数,枚举每两个队伍的比赛结果(分配当前队伍的分数). 可以发现方案数量与具体哪只球队得了多少分无关,只与当前比赛的队伍数量和得分序列的组成有关.可以记忆化搜 ...

  10. RelativeSource的用法

    绑定自身的数据 <Style TargetType="Button"> <Setter Property="Width" Value=&quo ...