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中动态检测编码chardet的使用教程
Jul 06 Python
PyQt5每天必学之创建窗口居中效果
Apr 19 Python
Python面向对象程序设计OOP入门教程【类,实例,继承,重载等】
Jan 05 Python
Pytorch中的VGG实现修改最后一层FC
Jan 15 Python
python实现飞机大战游戏(pygame版)
Oct 26 Python
django中的数据库迁移的实现
Mar 16 Python
pandas分批读取大数据集教程
Jun 06 Python
Django Session和Cookie分别实现记住用户登录状态操作
Jul 02 Python
python爬虫数据保存到mongoDB的实例方法
Jul 28 Python
python基础入门之普通操作与函数(三)
Jun 13 Python
python可视化大屏库big_screen示例详解
Nov 23 Python
python数字图像处理之图像的批量处理
Jun 28 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新手上路(二)
2006/10/09 PHP
php cookie 作用范围?不要在当前页面使用你的cookie
2009/03/24 PHP
php实现自动获取生成文章主题关键词功能的深入分析
2013/06/03 PHP
PHP中使用smarty生成静态文件的例子
2014/04/24 PHP
yii实现使用CUploadedFile上传文件的方法
2015/12/28 PHP
php对接java现实加签验签的实例
2016/11/25 PHP
PHP串行化与反串行化实例分析
2016/12/27 PHP
PHP数组基本用法与知识点总结
2020/06/02 PHP
基于jquery的图片幻灯展示源码
2012/07/15 Javascript
jquery实现图片随机排列的方法
2015/05/04 Javascript
jQuery中的ready函数与window.onload谁先执行
2016/06/21 Javascript
jQuery ajax方法传递中文时出现中文乱码的解决方法
2016/07/25 Javascript
自己封装的一个简单的倒计时功能实例
2016/11/23 Javascript
JS拉起或下载app的实现代码
2017/02/22 Javascript
Vue2学习笔记之请求数据交互vue-resource
2017/02/23 Javascript
详解Node.js中exports和module.exports的区别
2017/04/19 Javascript
es6学习笔记之Async函数的使用示例
2017/05/11 Javascript
JS实现不用中间变量temp 实现两个变量值得交换方法
2018/02/04 Javascript
开源一个微信小程序仪表盘组件过程解析
2019/07/30 Javascript
JavaScript中的this妙用实例分析
2020/05/09 Javascript
jquery更改元素属性attr()方法操作示例
2020/05/22 jQuery
如何在python中写hive脚本
2019/11/08 Python
Python autoescape标签用法解析
2020/01/17 Python
Python实现爬取并分析电商评论
2020/06/19 Python
python3.6中anaconda安装sklearn踩坑实录
2020/07/28 Python
Python程序慢的重要原因
2020/09/04 Python
如何用css3实现switch组件开关的方法
2018/02/09 HTML / CSS
美国第二大连锁书店:Books-A-Million
2017/12/28 全球购物
英国IT硬件供应商,定制游戏PC:Mesh Computers
2019/03/28 全球购物
最新远光软件笔试题面试题内容
2013/11/08 面试题
旷课检讨书2000字
2014/01/14 职场文书
财务总监管理职责范文
2014/03/09 职场文书
班级学习雷锋活动总结
2014/07/04 职场文书
美德少年主要事迹材料
2015/11/04 职场文书
python OpenCV学习笔记
2021/03/31 Python
使用Selenium实现微博爬虫(预登录、展开全文、翻页)
2021/04/13 Python