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中遍历文件的3个方法
Sep 02 Python
Python中的map()函数和reduce()函数的用法
Apr 27 Python
在Python中使用HTMLParser解析HTML的教程
Apr 29 Python
python实现发送邮件及附件功能
Mar 02 Python
python将txt文档每行内容循环插入数据库的方法
Dec 28 Python
python石头剪刀布小游戏(三局两胜制)
Jan 20 Python
谈谈Python中的while循环语句
Mar 10 Python
Python 使用 attrs 和 cattrs 实现面向对象编程的实践
Jun 12 Python
flask利用flask-wtf验证上传的文件的方法
Jan 17 Python
pycharm通过anaconda安装pyqt5的教程
Mar 24 Python
基于Python爬取素材网站音频文件
Oct 21 Python
Python实现单例模式的5种方法
Jun 15 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
深入了解 register_globals (附register_globals=off 网站打不开的解决方法)
2012/06/27 PHP
无刷新动态加载数据 滚动条加载适合评论等页面
2013/10/16 PHP
详解YII关联查询
2016/01/10 PHP
cakephp常见知识点汇总
2017/02/24 PHP
Laravel 自定命令以及生成文件的例子
2019/10/23 PHP
超级强大的表单验证
2006/06/26 Javascript
jQuery实现公告文字左右滚动的实例代码
2013/10/29 Javascript
Jquery操作Ajax方法小结
2015/11/29 Javascript
jQuery实现图片局部放大镜效果
2016/03/17 Javascript
对js中回调函数的一些看法
2016/08/29 Javascript
js实现3D图片展示效果
2017/03/09 Javascript
react开发中如何使用require.ensure加载es6风格的组件
2017/05/09 Javascript
详解Vue3中对VDOM的改进
2020/04/23 Javascript
python实现同时给多个变量赋值的方法
2015/04/30 Python
python3实现TCP协议的简单服务器和客户端案例(分享)
2017/06/14 Python
Python 基础教程之str和repr的详解
2017/08/20 Python
Python实现正弦信号的时域波形和频谱图示例【基于matplotlib】
2018/05/04 Python
使用Flask集成bootstrap的方法
2018/07/24 Python
Pyqt5如何让QMessageBox按钮显示中文示例代码
2019/04/11 Python
python基于socket实现的UDP及TCP通讯功能示例
2019/11/01 Python
Pygame的程序开始示例代码
2020/05/07 Python
Tory Burch美国官方网站:美国时尚生活品牌
2016/08/01 全球购物
印尼美容产品购物网站:PerfectBeauty.id
2017/12/01 全球购物
全球最受追捧的运动服品牌领先数字目的地:Stylerunner
2020/11/25 全球购物
得到Class的三个过程是什么
2012/08/10 面试题
什么是聚集索引和非聚集索引
2012/01/17 面试题
课改先进个人汇报材料
2014/01/26 职场文书
2014全国两会学习心得体会1000字
2014/03/10 职场文书
给校长的建议书500字
2014/05/15 职场文书
四风专项整治工作情况汇报
2014/10/28 职场文书
债务纠纷起诉书
2015/05/20 职场文书
行政二审代理词
2015/05/25 职场文书
土木工程毕业答辩开场白
2015/05/29 职场文书
Python基础详解之描述符
2021/04/28 Python
pytorch实现ResNet结构的实例代码
2021/05/17 Python
Golang标准库syscall详解(什么是系统调用)
2021/05/25 Golang