django rest_framework 实现用户登录认证
django rest_framework 实现用户登录认证
1、安装
pip install djangorestframework

2、创建项目及应用
创建过程略
目录结构如图

3、设置settings.py
设置数据库连接
# MySQL 增加mysql 连接
DATABASES = {
'default':{
'ENGINE':'django.db.backends.mysql',
'HOST':'127.0.0.1',
'PORT':'',
'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'] = ''
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验证登录接口


如图显示登录成功。
遇到的坑:
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,上面获取参数的方式 三种皆可。

2、如果选择了content-type为application/json,则body 要选择raw ,如图

而此时获取参数的方式只能选择第一种。
django rest_framework 实现用户登录认证的更多相关文章
- Django实现单用户登录
最近由于要毕业了写论文做毕设,然后还在实习发现已经好久都没有写博客了.今天由于工作需求,需要用Django实现单用户登录.大概意思就是跟QQ一样的效果,每个账号只能一个地方登录使用,限制账号的登录次数 ...
- 基于jwt的用户登录认证
最近在app的开发过程中,做了一个基于token的用户登录认证,使用vue+node+mongoDB进行的开发,前来总结一下. token认证流程: 1:用户输入用户名和密码,进行登录操作,发送登录信 ...
- 2018-8-16JWTtoken用户登录认证思路分析9502751
2018-8-16JWTtoken用户登录认证思路分析9502751 JWT token在商城中的实现 class UserView(CreateAPIView): serializer_class ...
- django 从零开始 8 用户登录验证 待测
看文档 djang 自带一个用户登录验证的方法,不过有些看着懵逼,去网上找了一圈,发现很多都是照抄文档说明的,几乎没说啥原理 特别是 from django.contrib.auth import a ...
- 关于django用户登录认证中的cookie和session
最近弄django的时候在用户登录这一块遇到了困难,网上的资料也都不完整或者存在缺陷. 写这篇文章的主要目的是对一些刚学django的新手朋友提供一些帮助.前提是你对django中的session和c ...
- Django实战(一)-----用户登录与注册系统2(数据模型、admin后台、路由视图)
使用Django开发Web应用的过程中,很多人都是急急忙忙地写视图,写前端页面,把最根本的模型设计给忽略了. 模型中定义了数据如何在数据库内保存,再直白点说就是数据表的定义.这部分工作体现在Djang ...
- 二、django rest_framework源码之认证流程剖析
1 绪言 上一篇中讲了django rest_framework总体流程,整个流程中最关键的一步就是执行dispatch方法.在dispatch方法中,在调用了一个initial方法,所有的认证.权限 ...
- ajax 的简单请求,get的加法运算,post加法运算,用户登录认证
视图函数部分 from django.shortcuts import render, HttpResponse import time from app01.models import User i ...
- Django实战(一)-----用户登录与注册系统6(session会话、注册视图)
因为因特网HTTP协议的特性,每一次来自于用户浏览器的请求(request)都是无状态的.独立的. 通俗地说,就是无法保存用户状态,后台服务器根本就不知道当前请求和以前及以后请求是否来自同一用户.对于 ...
随机推荐
- Kubernetes 记一次网络请求分析
查看pod,server root @ master ➜ ~ kubectl get po,svc -n irm-server -o wide NAME READY STATUS RESTARTS A ...
- [POJ3107]Godfather
题目描述 Description Last years Chicago was full of gangster fights and strange murders. The chief of th ...
- Ultimate Chicken Horse GameProject第二次迭代成果文档
基于上一次的迭代中的数据结构我们补充了UML图.用例图及状态图. 用例图: 选择游戏地图:玩家可以在本地游戏界面将角色移动到地图门口并按下E进入地图. 进行游戏用例: 选择并摆放道 ...
- 单交换机VLAN划分(基于Cisco模拟器)
实验目的: (1)掌握交换机配置的几种模式及基本配置命令. (2)掌握VLAN的原理及基于交换机端口的VLAN划分方法. 实验设备: 交换机一台,主机四台,直通线四根 实验步骤: 1.给交换机划分VL ...
- Linux上zookeeper+dubbo-admin的安装及使用
空linux安装,需要先安装JDK,mysql,tomcat等 一. dubbo-admin依赖外置tomcat. tomcat依赖JDK. 首先要安装JDK,tomcat,顺便安装mysql 安装J ...
- A1070 Mooncake (25 分)
一.参考代码 #include<cstdio> #include<algorithm> #include<iostream> using namespace std ...
- [LeetCode] 417. Pacific Atlantic Water Flow 太平洋大西洋水流
Given an m x n matrix of non-negative integers representing the height of each unit cell in a contin ...
- [LeetCode] 264. Ugly Number II 丑陋数之二
Write a program to find the n-th ugly number. Ugly numbers are positive numbers whose prime factors ...
- [LeetCode] 33. Search in Rotated Sorted Array 在旋转有序数组中搜索
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e. ...
- AtCoder Grand Contest 035 简要题解
从这里开始 题目目录 Problem A XOR Circle 你发现,权值的循环节为 $a_0, a_1, a_0\oplus a_1$,然后暴力即可. Code #include <bits ...