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中非常实用的一些功能和函数分享
Feb 14 Python
Python变量和数据类型详解
Feb 15 Python
python文本数据处理学习笔记详解
Jun 17 Python
python中update的基本使用方法详解
Jul 17 Python
python实现连连看辅助之图像识别延伸
Jul 17 Python
手写一个python迭代器过程详解
Aug 27 Python
python多线程高级锁condition简单用法示例
Nov 07 Python
Python tkinter实现图片标注功能(完整代码)
Dec 08 Python
在keras 中获取张量 tensor 的维度大小实例
Jun 10 Python
python进行OpenCV实战之画图(直线、矩形、圆形)
Aug 27 Python
Python中logging日志的四个等级和使用
Nov 17 Python
用Python爬取某乎手机APP数据
Jun 15 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
php下尝试使用GraphicsMagick的缩略图功能
2011/01/01 PHP
php中将图片gif,jpg或mysql longblob或blob字段值转换成16进制字符串
2011/08/23 PHP
PHP MySql增删改查的简单实例
2016/06/21 PHP
PHP让数组中有相同值的组成新的数组实例
2017/12/31 PHP
php设计模式之职责链模式定义与用法经典示例
2019/09/19 PHP
javascript suggest效果 自动完成实现代码分享
2012/02/17 Javascript
通过javascript把图片转化为字符画
2013/10/24 Javascript
探讨javascript是不是面向对象的语言
2013/11/21 Javascript
javascript实现checkbox全选的代码
2015/04/30 Javascript
jQuery的Each比JS原生for循环性能慢很多的原因
2016/07/05 Javascript
什么是JavaScript中的结果值?
2016/10/08 Javascript
JavaScript中清空数组的方法总结
2016/12/02 Javascript
BootStrap便签页的简单应用
2017/01/06 Javascript
js实现移动端轮播图效果
2020/12/09 Javascript
浅谈mint-ui 填坑之路
2017/11/06 Javascript
JavaScript简单实现动态改变HTML内容的方法示例
2018/12/25 Javascript
vue+mock.js实现前后端分离
2019/07/24 Javascript
jquery弹窗时禁止body滚动条滚动的例子
2019/09/21 jQuery
vue项目中常见问题及解决方案(推荐)
2019/10/21 Javascript
JavaScrip如果基于url实现图片下载
2020/07/03 Javascript
python中的内置函数getattr()介绍及示例
2014/07/20 Python
Python编程中实现迭代器的一些技巧小结
2016/06/21 Python
Scrapy基于selenium结合爬取淘宝的实例讲解
2018/06/13 Python
python使用插值法画出平滑曲线
2018/12/15 Python
python解析yaml文件过程详解
2019/08/30 Python
Pytorch实现基于CharRNN的文本分类与生成示例
2020/01/08 Python
Tensorflow tf.nn.depthwise_conv2d如何实现深度卷积的
2020/04/20 Python
从Pytorch模型pth文件中读取参数成numpy矩阵的操作
2021/03/04 Python
倩碧美国官网:Clinique美国
2016/07/20 全球购物
River Island美国官网:英国高街时尚品牌
2018/09/04 全球购物
来自世界各地的饮料:Flavourly
2019/05/06 全球购物
初中英语演讲稿
2014/04/29 职场文书
中国梦演讲稿5分钟
2014/08/19 职场文书
民主生活会对照检查材料范文
2014/10/01 职场文书
教师思想作风整顿个人剖析材料
2014/10/10 职场文书
浅谈Vue的computed计算属性
2022/03/21 Vue.js