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实现同时兼容老版和新版Socket协议的一个简单WebSocket服务器
Jun 04 Python
通过代码实例展示Python中列表生成式的用法
Mar 31 Python
在Django中创建第一个静态视图
Jul 15 Python
Python中MySQL数据迁移到MongoDB脚本的方法
Apr 28 Python
python中matplotlib实现最小二乘法拟合的过程详解
Jul 11 Python
对python中return和print的一些理解
Aug 18 Python
Python入门之三角函数全解【收藏】
Nov 08 Python
详解Django的CSRF认证实现
Oct 09 Python
Python及Pycharm安装方法图文教程
Aug 05 Python
python遍历文件目录、批量处理同类文件
Aug 31 Python
pytorch快速搭建神经网络_Sequential操作
Jun 17 Python
深入分析python 排序
Aug 24 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
同时提取多条新闻中的文本一例
2006/10/09 PHP
九个你必须知道而且又很好用的php函数和特点
2013/08/08 PHP
php cookie使用方法学习笔记分享
2013/11/07 PHP
php调用google接口生成二维码示例
2014/04/28 PHP
PHP打开和关闭文件操作函数总结
2014/11/18 PHP
php 多继承的几种常见实现方法示例
2019/11/18 PHP
30分钟就入门的正则表达式基础教程
2013/02/25 Javascript
javascript 实现map集合
2015/04/03 Javascript
javascript无刷新评论实现方法
2015/05/13 Javascript
js 右侧浮动层效果实现代码(跟随滚动)
2015/11/22 Javascript
JavaScript中的this,call,apply使用及区别详解
2016/01/29 Javascript
jQuery实现定位滚动条位置
2016/08/05 Javascript
Jquery遍历select option和添加移除option的实现方法
2016/08/26 Javascript
Javascript 一些需要注意的细节(必看篇)
2017/07/08 Javascript
HTML5+JS+JQuery+ECharts实现异步加载问题
2017/12/16 jQuery
原生JS封装_new函数实现new关键字的功能
2018/08/12 Javascript
Vue瀑布流插件的使用示例
2018/09/19 Javascript
详解Next.js页面渲染的优化方案
2019/01/27 Javascript
[03:02]生活中的Dendi之野外度假篇
2016/08/09 DOTA
Python实现身份证号码解析
2015/09/01 Python
python读写csv文件实例代码
2019/07/05 Python
运用PyTorch动手搭建一个共享单车预测器
2019/08/06 Python
解决Django中修改js css文件但浏览器无法及时与之改变的问题
2019/08/31 Python
利用pandas合并多个excel的方法示例
2019/10/10 Python
Python SMTP发送电子邮件的示例
2020/09/23 Python
使用CSS3来制作消息提醒框
2015/07/12 HTML / CSS
Kate Spade美国官网:纽约新兴时尚品牌,以包包闻名于世
2017/11/09 全球购物
设置器与访问器的定义以及各自特点
2016/01/08 面试题
优秀班干部事迹材料
2014/01/26 职场文书
幼儿园英语教学反思
2014/01/30 职场文书
大学校务公开实施方案
2014/03/31 职场文书
大学生村官座谈会发言材料
2014/05/25 职场文书
有关环保的标语
2014/06/13 职场文书
党员干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
2015年元宵节活动总结
2015/02/06 职场文书
Python中re模块的元字符使用小结
2022/04/07 Python