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爬虫之爬虫的定义及URL构成
Nov 04 Python
Python函数中定义参数的四种方式
Nov 30 Python
在Python中用keys()方法返回字典键的教程
May 21 Python
Python压缩解压缩zip文件及破解zip文件密码的方法
Nov 04 Python
利用Python中unittest实现简单的单元测试实例详解
Jan 09 Python
详解Python在七牛云平台的应用(一)
Dec 05 Python
网红编程语言Python将纳入高考你怎么看?
Jun 07 Python
Python实现计算文件MD5和SHA1的方法示例
Jun 11 Python
Python字典对象实现原理详解
Jul 01 Python
Python中logging日志库实例详解
Feb 19 Python
怎么快速自学python
Jun 22 Python
pytorch model.cuda()花费时间很长的解决
Jun 01 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
第1次亲密接触PHP5(2)
2006/10/09 PHP
PHP命名空间(Namespace)的使用详解
2013/05/04 PHP
Jquery replace 字符替换实现代码
2010/12/02 Javascript
JS实现简单的Canvas画图实例
2013/07/04 Javascript
javascript用户注册提示效果的简单实例
2013/08/17 Javascript
JS判断对象是否存在的10种方法总结
2013/12/23 Javascript
JS中如何比较两个Json对象是否相等实例代码
2016/07/13 Javascript
基于jQuery实现照片墙自动播放特效
2017/01/12 Javascript
关于javascript作用域的常见面试题分享
2017/06/18 Javascript
详解vue-meta如何让你更优雅的管理头部标签
2018/01/18 Javascript
微信小程序实现MUI数字输入框效果
2018/01/31 Javascript
详解服务端预渲染之Nuxt(介绍篇)
2019/04/07 Javascript
JS实现根据详细地址获取经纬度功能示例
2019/04/16 Javascript
mapboxgl实现带箭头轨迹线的代码
2021/01/04 Javascript
python使用socket进行简单网络连接的方法
2015/04/29 Python
python实现矩阵乘法的方法
2015/06/28 Python
简要讲解Python编程中线程的创建与锁的使用
2016/02/28 Python
Python入门_浅谈数据结构的4种基本类型
2017/05/16 Python
浅谈python中列表、字符串、字典的常用操作
2017/09/19 Python
python3 读写文件换行符的方法
2018/04/09 Python
Django保护敏感信息的方法示例
2019/05/09 Python
浅谈pytorch grad_fn以及权重梯度不更新的问题
2019/08/20 Python
pytorch实现用CNN和LSTM对文本进行分类方式
2020/01/08 Python
经典演讲稿范文
2013/12/30 职场文书
逃课上网检讨书
2014/02/20 职场文书
继承公证书样本
2014/04/04 职场文书
促销活动总结
2014/04/28 职场文书
爱国主义教育活动总结
2014/05/07 职场文书
党员领导干部承诺书
2014/05/28 职场文书
人力资源管理毕业生自荐信
2014/06/26 职场文书
玩手机检讨书1000字
2014/10/20 职场文书
维稳工作情况汇报
2014/10/27 职场文书
工作违纪检讨书范文
2015/01/26 职场文书
工地食品安全责任书
2015/05/09 职场文书
Windows下载并安装MySQL8.0.x 版本的完整教程
2022/04/10 MySQL
WINDOWS下安装mysql 8.x 的方法图文教程
2022/04/19 MySQL