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 相关文章推荐
pandas的object对象转时间对象的方法
Apr 11 Python
Python中的TCP socket写法示例
May 11 Python
详解Django项目中模板标签及模板的继承与引用(网站中快速布置广告)
Mar 27 Python
Falsk 与 Django 过滤器的使用与区别详解
Jun 04 Python
Python正则表达式匹配和提取IP地址
Jun 06 Python
python图形用户接口实例详解
Dec 16 Python
python基于celery实现异步任务周期任务定时任务
Dec 30 Python
Python Django2 model 查询介绍(条件、范围、模糊查询)
Mar 16 Python
简单了解Django项目应用创建过程
Jul 06 Python
python下载的库包存放路径
Jul 27 Python
如何解决python多种版本冲突问题
Oct 13 Python
单身狗福利?Python爬取某婚恋网征婚数据
Jun 03 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许愿墙模块功能分析
2013/06/25 PHP
Destoon旺旺无法正常显示,点击提示“会员名不存在”的解决办法
2014/06/21 PHP
Yii2框架使用计划任务的方法
2016/05/25 PHP
详细解读php的命名空间(二)
2018/02/21 PHP
PHP 观察者模式深入理解与应用分析
2019/09/25 PHP
有一段有意思的代码-javascript现实多行信息
2007/08/26 Javascript
jQuery 数据缓存data(name, value)详解及实现
2010/01/04 Javascript
js实现图片无缝滚动特效
2020/03/19 Javascript
基于BootStrap环境写jQuery tabs插件
2016/07/12 Javascript
全面了解JavaScript对象进阶
2016/07/19 Javascript
JS插件plupload.js实现多图上传并显示进度条
2016/11/29 Javascript
js闭包学习心得总结
2018/04/17 Javascript
详解Angular5 路由传参的3种方法
2018/04/28 Javascript
浅谈webpack 构建性能优化策略小结
2018/06/13 Javascript
详解微信小程序图片地扯转base64解决方案
2019/08/18 Javascript
解决vue.js提交数组时出现数组下标的问题
2019/11/05 Javascript
vue+vant使用图片预览功能ImagePreview的问题解决
2020/04/10 Javascript
Postman参数化实现过程及原理解析
2020/08/13 Javascript
Python实现根据IP地址和子网掩码算出网段的方法
2015/07/30 Python
Python输入二维数组方法
2018/04/13 Python
django 使用 request 获取浏览器发送的参数示例代码
2018/06/11 Python
Python3日期与时间戳转换的几种方法详解
2019/06/04 Python
PyQt5 QTableView设置某一列不可编辑的方法
2019/06/25 Python
Python爬虫学习之获取指定网页源码
2019/07/30 Python
python网络爬虫 Scrapy中selenium用法详解
2019/09/28 Python
CSS3+JavaScript实现炫酷呼吸效果的示例代码
2020/06/15 HTML / CSS
菲律宾领先的在线时尚商店:Zalora菲律宾
2018/02/08 全球购物
美国领先的在线邮轮旅游公司:CruiseDirect
2018/06/07 全球购物
严选全球尖货,立足香港:Bonpont宝盆
2018/07/24 全球购物
西班牙购买行李箱和背包网站:Maletas Greenwich
2019/10/08 全球购物
数据库方面面试题
2012/04/22 面试题
国贸专业个人求职信分享
2013/12/04 职场文书
房产委托公证书
2014/04/08 职场文书
节水口号标语
2014/06/19 职场文书
python3+PyQt5+Qt Designer实现界面可视化
2021/06/10 Python
html中显示特殊符号(附带特殊字符对应表)
2021/06/21 HTML / CSS