django rest framework 实现用户登录认证详解


Posted in Python onJuly 29, 2019

1、安装

pip install djangorestframework

django rest framework 实现用户登录认证详解

2、创建项目及应用

目录结构如图

django rest framework 实现用户登录认证详解

3、设置settings.py

设置数据库连接

# MySQL 增加mysql 连接
DATABASES = {
 'default':{
  'ENGINE':'django.db.backends.mysql',
  'HOST':'127.0.0.1',
  'PORT':'3306',
  'NAME':'dbname', # 数据库名
  'USER':'username',
  'PASSWORD':'password',
  'OPTIONS':{
   'sql_mode': 'traditional'
  },
 }
}

添加应用

# Application definition
INSTALLED_APPS = [
  ...
 'rest_framework',
 'api',
]

4、创建用户信息models,在models.py

from django.db import models
# Create your models here.
class User(models.Model):
 username = models.CharField(max_length=32,unique=True)
 password = models.CharField(max_length=32)
 class Meta:
  db_table = 'user'
  verbose_name = verbose_name_plural = '用户信息表'
class userToken(models.Model):
 username = models.OneToOneField(to='User',on_delete=models.DO_NOTHING)
 token = models.CharField(max_length=60)
 class Meta:
  db_table = 'user_token'
  verbose_name = verbose_name_plural = '用户token表'

在项目下执行命令生成数据表

python manage.py makemigrations 
python manage.py migrate

5、在views.py 文件里,编写登录验证程序

from django.shortcuts import render
# Create your views here.
import time
from api import models
from django.http import JsonResponse
from rest_framework.views import APIView
class AuthView(APIView):
 def post(self,request,*args,**kwargs):
  ret = {'code':1000,'msg':None}
  try:
   # 参数是datadict 形式
   usr = request.data.get('username')
   pas = request.data.get('password')
   # usr = request._request.POST.get('username')
   # pas = request._request.POST.get('password')
   # usr = request.POST.get('username')
   # pas = request.POST.get('password')
   print(usr)
   # obj = models.User.objects.filter(username='yang', password='123456').first()
   obj = models.User.objects.filter(username=usr,password=pas).first()
   print(obj)
   print(type(obj))
   print(obj.username)
   print(obj.password)
   if not obj:
    ret['code'] = '1001'
    ret['msg'] = '用户名或者密码错误'
    return JsonResponse(ret)
    # 里为了简单,应该是进行加密,再加上其他参数
   token = str(time.time()) + usr
   print(token)
   models.userToken.objects.update_or_create(username=obj, defaults={'token': token})
   ret['msg'] = '登录成功'
   #ret['token'] = token
  except Exception as e:
   ret['code'] = 1002
   ret['msg'] = '请求异常'
  return JsonResponse(ret)

6、在urls.py设置访问路径

from django.contrib import admin
from django.urls import path
from django.conf.urls import url
from api.views import AuthView
urlpatterns = [
 path('admin/', admin.site.urls),
 url(r'^api/v1/auth/$', AuthView.as_view()),
]

7、通过postman验证登录接口

django rest framework 实现用户登录认证详解

django rest framework 实现用户登录认证详解

如图显示登录成功。

遇到的坑:

views获取Post参数的方式:

# 如下有三种方式获取参数,有些文章介绍,必须使用第二种,
# 其实不然,具体使用哪种要看参数的传入形式而定,建议使用第一种,
#因为第一种支持key-value 和 json 格式 ,后面两种仅支持 key-value.
usr = request.data.get('username')
pas = request.data.get('password')
# usr = request._request.POST.get('username')
# pas = request._request.POST.get('password')
# usr = request.POST.get('username')
# pas = request.POST.get('password')

postman 配置

1、如图,如果没有选择设置content-type,则参数要选择 form-data,上面获取参数的方式 三种皆可。

django rest framework 实现用户登录认证详解

2、如果选择了content-type为application/json,则body 要选择raw ,如图

django rest framework 实现用户登录认证详解

而此时获取参数的方式只能选择第一种。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python 变量类型及命名规则介绍
Jun 08 Python
python爬虫入门教程--HTML文本的解析库BeautifulSoup(四)
May 25 Python
Python使用arrow库优雅地处理时间数据详解
Oct 10 Python
Python 实现一行输入多个值的方法
Apr 21 Python
Python爬虫获取图片并下载保存至本地的实例
Jun 01 Python
使用pandas read_table读取csv文件的方法
Jul 04 Python
Python txt文件加入字典并查询的方法
Jan 15 Python
python使用Plotly绘图工具绘制柱状图
Apr 01 Python
django数据关系一对多、多对多模型、自关联的建立
Jul 24 Python
Python如何使用paramiko模块连接linux
Mar 18 Python
Python实现简单猜数字游戏
Feb 03 Python
python urllib库的使用详解
Apr 13 Python
pycharm重命名文件的方法步骤
Jul 29 #Python
PyQt5实现暗黑风格的计时器
Jul 29 #Python
Python Django 实现简单注册功能过程详解
Jul 29 #Python
Django models.py应用实现过程详解
Jul 29 #Python
pycharm中显示CSS提示的知识点总结
Jul 29 #Python
pandas 如何分割字符的实现方法
Jul 29 #Python
python自定义时钟类、定时任务类
Feb 22 #Python
You might like
PHP5.0对象模型探索之抽象方法和抽象类
2006/09/05 PHP
php设计模式 Builder(建造者模式)
2011/06/26 PHP
基于initPHP的框架介绍
2013/04/18 PHP
微信支付开发动态链接Native支付
2016/07/12 PHP
redis查看连接数及php模拟并发创建redis连接的方法
2016/12/15 PHP
PHP PDO和消息队列的个人理解与应用实例分析
2019/11/25 PHP
jquery win 7透明弹出层效果的简单代码
2013/08/06 Javascript
JQuery动画animate的stop方法使用详解
2014/05/09 Javascript
IE6/IE7中JavaScript json提示缺少标识符、字符串或数字问题处理
2014/12/16 Javascript
jQuery实现为LI列表前3行设置样式的方法【2种方法】
2016/09/04 Javascript
浅谈javascript:两种注释,声明变量,定义函数
2016/09/29 Javascript
整理关于Bootstrap警示框的慕课笔记
2017/03/29 Javascript
使用vue如何构建一个自动建站项目
2018/02/05 Javascript
vue 微信授权登录解决方案
2018/04/10 Javascript
@angular前端项目代码优化之构建Api Tree的方法
2018/12/24 Javascript
浅谈Vue项目骨架屏注入实践
2019/08/05 Javascript
layui 实现加载动画以及非真实加载进度的方法
2019/09/23 Javascript
[02:01]大师之路——DOTA2完美大师赛11月论剑上海
2017/11/06 DOTA
python抓取网页图片并放到指定文件夹
2014/04/24 Python
Python实现查看系统启动项功能示例
2018/05/10 Python
python中从str中提取元素到list以及将list转换为str的方法
2018/06/26 Python
python bmp转换为jpg 并删除原图的方法
2018/10/25 Python
在Django下测试与调试REST API的方法详解
2019/08/29 Python
Pandas操作CSV文件的读写实现方法
2019/11/13 Python
python类中super() 的使用解析
2019/12/19 Python
基于keras 模型、结构、权重保存的实现
2020/01/24 Python
学python需要去培训机构吗
2020/07/01 Python
解决Keras的自定义lambda层去reshape张量时model保存出错问题
2020/07/01 Python
Django --Xadmin 判断登录者身份实例
2020/07/03 Python
品学兼优的大学生自我评价
2013/09/20 职场文书
初三化学教学反思
2014/01/23 职场文书
授权委托书格式模板
2014/04/03 职场文书
募捐倡议书怎么写
2014/05/14 职场文书
培养联系人考察意见
2015/06/01 职场文书
民事调解协议书
2016/03/21 职场文书
Go语言-为什么返回值为接口类型,却返回结构体
2021/04/24 Golang