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使用迭代器捕获Generator返回值的方法
Apr 05 Python
fastcgi文件读取漏洞之python扫描脚本
Apr 23 Python
浅谈python for循环的巧妙运用(迭代、列表生成式)
Sep 26 Python
Python基于Tkinter模块实现的弹球小游戏
Dec 27 Python
了解不常见但是实用的Python技巧
May 23 Python
Python with用法:自动关闭文件进程
Jul 10 Python
django foreignkey外键使用的例子 相当于left join
Aug 06 Python
python 回溯法模板详解
Feb 26 Python
关于keras.layers.Conv1D的kernel_size参数使用介绍
May 22 Python
Python使用xlrd实现读取合并单元格
Jul 09 Python
python 决策树算法的实现
Oct 09 Python
python manim实现排序算法动画示例
Aug 14 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
Mysql的GROUP_CONCAT()函数使用方法
2008/03/28 PHP
php 冒泡排序 交换排序法
2011/05/10 PHP
php+mysql查询实现无限下级分类树输出示例
2016/10/03 PHP
初学JavaScript_03(ExtJs Grid的简单使用)
2008/10/02 Javascript
String.prototype实现的一些javascript函数介绍
2013/11/22 Javascript
JS,Jquery获取select,dropdownlist,checkbox下拉列表框的值(示例代码)
2014/01/11 Javascript
jquery实现的网页自动播放声音
2014/04/30 Javascript
微信小程序 scroll-view组件实现列表页实例代码
2016/12/14 Javascript
Bootstrap表单制作代码
2017/03/17 Javascript
vue实现验证码输入框组件
2017/12/14 Javascript
代码详解javascript模块加载器
2018/03/04 Javascript
Vue下滚动到页面底部无限加载数据的示例代码
2018/04/22 Javascript
解决Js先触发失去焦点事件再执行点击事件的问题
2018/08/30 Javascript
layui实现数据表格点击搜索功能
2020/03/26 Javascript
基于Vue 撸一个指令实现拖拽功能
2019/10/09 Javascript
vue中axios的二次封装实例讲解
2019/10/14 Javascript
vue仿携程轮播图效果(滑动轮播,下方高度自适应)
2021/02/11 Vue.js
Python unittest模块用法实例分析
2018/05/25 Python
Anaconda2下实现Python2.7和Python3.5的共存方法
2018/06/11 Python
python K近邻算法的kd树实现
2018/09/06 Python
Django在admin后台集成TinyMCE富文本编辑器的例子
2019/08/09 Python
关于Tensorflow分布式并行策略
2020/02/03 Python
Python 日期与时间转换的方法
2020/08/01 Python
使用CSS3实现多列布局与多背景的技巧
2016/02/29 HTML / CSS
北美三大旅游网站之一:Travelocity加拿大
2016/08/20 全球购物
全球性的在线购物网站:Zapals
2017/03/22 全球购物
世界上最大的隐形眼镜商店:1-800 Contacts
2018/11/03 全球购物
大学生村官考核材料
2014/05/23 职场文书
影子教师研修方案
2014/06/14 职场文书
毕业证丢失证明范本
2014/09/20 职场文书
专题组织生活会发言材料
2014/10/17 职场文书
小学家长通知书评语
2014/12/31 职场文书
项目经理助理岗位职责
2015/04/13 职场文书
2016年员工年度考核评语
2015/12/02 职场文书
2016年优秀共产党员先进事迹材料
2016/02/29 职场文书
2019预备党员转正申请书模板2篇!
2019/08/07 职场文书