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计算文本文件行数的方法
Jul 06 Python
Python 中 Meta Classes详解
Feb 13 Python
名片管理系统python版
Jan 11 Python
python用plt画图时,cmp设置方法
Dec 13 Python
Python XML转Json之XML2Dict的使用方法
Jan 15 Python
python读取图片的方式,以及将图片以三维数组的形式输出方法
Jul 03 Python
PowerBI和Python关于数据分析的对比
Jul 11 Python
Python3 操作 MySQL 插入一条数据并返回主键 id的实例
Mar 02 Python
python 成功引入包但无法正常调用的解决
Mar 09 Python
Python ADF 单位根检验 如何查看结果的实现
Jun 03 Python
Python直接赋值及深浅拷贝原理详解
Sep 05 Python
python logging模块的使用详解
Oct 23 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下实现农历日历的代码
2007/03/07 PHP
thinkphp3查询mssql数据库乱码解决方法分享
2014/02/11 PHP
jquery 得到当前页面高度和宽度的两个函数
2010/02/21 Javascript
ajax处理php返回json数据的实例代码
2013/01/24 Javascript
jQuery之ajax技术的详细介绍
2013/06/19 Javascript
Javascript 颜色渐变效果的实现代码
2013/10/01 Javascript
jQuery中remove()方法用法实例
2014/12/25 Javascript
JS+CSS实现的日本门户网站经典选项卡导航效果
2015/09/27 Javascript
微信小程序 免费SSL证书https、TLS版本问题的解决办法
2016/12/14 Javascript
js简单实现网页换肤功能
2017/04/07 Javascript
ES6教程之for循环和Map,Set用法分析
2017/04/10 Javascript
Nodejs进阶:express+session实现简易登录身份认证
2017/04/24 NodeJs
javascript 中关于array的常用方法详解
2017/05/05 Javascript
细说Vue组件的服务器端渲染的过程
2019/05/30 Javascript
在vue中实现给每个页面顶部设置title
2020/07/29 Javascript
js仿淘宝放大镜效果
2020/12/28 Javascript
[02:55]DOTA2英雄基础教程 发条技师
2013/12/04 DOTA
在python的WEB框架Flask中使用多个配置文件的解决方法
2014/04/18 Python
python strip() 函数和 split() 函数的详解及实例
2017/02/03 Python
python使用matplotlib绘制折线图教程
2017/02/08 Python
Pandas中把dataframe转成array的方法
2018/04/13 Python
Python在groupby分组后提取指定位置记录方法
2018/04/20 Python
python 并发编程 多路复用IO模型详解
2019/08/20 Python
python修改FTP服务器上的文件名
2019/09/11 Python
利用pyecharts读取csv并进行数据统计可视化的实现
2020/04/17 Python
Python3内置函数chr和ord实现进制转换
2020/06/05 Python
HTML中meta标签及Keywords
2020/04/15 HTML / CSS
马来西亚领先的在线礼品店:Giftr
2018/08/23 全球购物
iostream与iostream.h的区别
2015/01/16 面试题
会计专业应届生求职信
2013/11/24 职场文书
酒吧员工的岗位职责
2013/11/26 职场文书
销售总监岗位职责
2014/01/04 职场文书
爱护花草树木的标语
2014/06/11 职场文书
公务员考察材料
2014/12/23 职场文书
人事任命通知
2015/04/20 职场文书
如何搭建 MySQL 高可用高性能集群
2021/06/21 MySQL