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 相关文章推荐
Flask SQLAlchemy一对一,一对多的使用方法实践
Feb 10 Python
Django中URL视图函数的一些高级概念介绍
Jul 20 Python
Python实现的求解最小公倍数算法示例
May 03 Python
python和shell获取文本内容的方法
Jun 05 Python
解决Tensorflow安装成功,但在导入时报错的问题
Jun 13 Python
详解python Todo清单实战
Nov 01 Python
python计算阶乘和的方法(1!+2!+3!+...+n!)
Feb 01 Python
使用python实现简单五子棋游戏
Jun 18 Python
tensorflow ckpt模型和pb模型获取节点名称,及ckpt转pb模型实例
Jan 21 Python
tensorflow 保存模型和取出中间权重例子
Jan 24 Python
python 遍历磁盘目录的三种方法
Apr 02 Python
教你怎么用Python selenium操作浏览器对象的基础API
Jun 23 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
改造一台复古桌面收音机
2021/03/02 无线电
特转载一高手总结PHP学习资源和链接.
2006/12/05 PHP
PHP设计模式之迭代器模式的深入解析
2013/06/13 PHP
php批量删除超链接的实现方法
2015/10/19 PHP
PHP扩展框架之Yaf框架的安装与使用
2016/05/18 PHP
php实现的统计字数函数定义与使用示例
2017/07/26 PHP
ASP.NET jQuery 实例18 通过使用jQuery validation插件校验DropDownList
2012/02/03 Javascript
基于jquery异步传输json数据格式实例代码
2013/11/23 Javascript
使用JQ来编写最基本的淡入淡出效果附演示动画
2014/10/31 Javascript
javascript的日期对象、数组对象、二维数组使用说明
2014/12/22 Javascript
JS中完美兼容各大浏览器的scrolltop方法
2015/04/17 Javascript
JavaScript中的toUTCString()方法使用详解
2015/06/12 Javascript
优化RequireJS项目的相关技巧总结
2015/07/01 Javascript
JS实现的另类手风琴效果网页内容切换代码
2015/09/08 Javascript
javascript伸缩菜单栏实现代码分享
2015/11/12 Javascript
JavaScript中eval()函数用法详解
2015/12/14 Javascript
js实现图片缓慢放大缩小效果
2016/08/02 Javascript
详解ECharts使用心得总结
2016/12/06 Javascript
微信小程序中子页面向父页面传值实例详解
2017/03/20 Javascript
NodeJS基础API搭建服务器详细过程记录
2017/04/01 NodeJs
Vue-cli创建项目从单页面到多页面的方法
2017/09/20 Javascript
把vue-router和express项目部署到服务器的方法
2018/02/21 Javascript
vue移动端微信授权登录插件封装的实例
2018/08/28 Javascript
Python实现删除列表中满足一定条件的元素示例
2017/06/12 Python
Python全局变量与局部变量区别及用法分析
2018/09/03 Python
python在不同条件下的输入与输出
2020/02/13 Python
Python 实现黑客帝国中的字符雨的示例代码
2020/02/20 Python
python中pyplot基础图标函数整理
2020/11/10 Python
全球高级音频和视频专家:HiDef Lifestyle
2019/08/02 全球购物
您熟悉ORM(Object-Relation Mapping)吗?请谈谈您所理解的ORM
2016/02/08 面试题
电大学习个人自我评价范文
2013/10/04 职场文书
工程地质勘察专业大学生求职信
2013/10/13 职场文书
打造高效课堂实施方案
2014/03/22 职场文书
2014年幼儿园小班工作总结
2014/12/04 职场文书
入党积极分子党小组意见
2015/06/02 职场文书
2016形势与政策学习心得体会
2016/01/12 职场文书