版本声明

python3.6.5
Django-2.0.6
djangorestframework-3.8.2
mysqlclient-1.3.12

1.写一个登录接口,不多说,直接上代码

login_models.py

  1. # -*- coding: utf-8
  2.  
  3. from django.db import models
  4. # Create your models here.
  5.  
  6. # 用户表
  7. class tbl_user(models.Model):
  8.  
  9. user_name = models.TextField(max_length=10)
  10. email = models.TextField(max_length=50,default='')
  11. phone=models.CharField(max_length=11,default='')
  12. password=models.TextField(max_length=30,default='')
  13. token_value=models.TextField(max_length=100)
  14. status=models.CharField(max_length=100)
  15. creat_time = models.DateTimeField(auto_now_add=True)
  16.  
  17. # desc排序数据
  18. class Meta:
  19. ordering = ['-creat_time']

 

post请求

login_userIn.py

  1. # coding:utf-8
  2. import json
  3. from django.http import HttpResponse
  4. from rest_framework.views import APIView
  5. from ApiSoftware.loginApi.PublicParameters import meta_json_Response,_Response_public
  6. from ApiSoftware.modes import login_models
  7. from ApiSoftware.loginApi.PublicParameters import get_dates
  8. import time,datetime
  9. import hashlib
  10.  
  11. class usr_login(APIView):
  12.  
  13. # 定义请求方法为post,这种方法需要继承rest_framework的APIView
  14. def post(self,request):
  15. #初始化登录的model
  16. register_models = login_models
  17. # 取到request对象的body(json)
  18. parameter_json = request.body
  19. # json转字典
  20. parameter = json.loads(parameter_json)
  21.  
  22. #定义请求里的key
  23. get_phone = 'phone'
  24. get_password = 'password'
  25. #这是我写的一个方法用来把字典转成json的
  26. get_json_Response = meta_json_Response()
  27. #这个是初始化一个公共类,后面无效参数都调用这里的一个无效参数的字典,然后再转json,返回给客户端
  28. get_Response_public = _Response_public()
  29. # 如果定义的get_phone和get_password都在请求的json中忘下走
  30. if get_phone in parameter and get_password in parameter:
  31. #取出其request.json中的phone和password
  32. phone=parameter[get_phone]
  33. password=parameter[get_password]
  34. # 如果phone和password都不为空
  35. if phone and password:
  36. #通过在model创建用户表通过取出的手机号和密码模糊查询是否有这个手机号和对应的密码
  37. inspect_phone = register_models.tbl_user.objects.filter(phone__contains=phone,password__contains=get_password)
  38. #判断inspect_phone是否为空
  39. if inspect_phone:
  40. inspect=True
  41. else:
  42. inspect=False
  43. #如果用户表没有这个手机号,走正常登录逻辑
  44. if inspect == True:
  45. #写一个方法通过sha256加密生成token
  46. def _token_value(value):
  47. hash = hashlib.sha256()
  48. hash.update(value.encode('utf-8'))
  49. return (hash.hexdigest())
  50. #获取现在的时间转str
  51. nowTime_to_token = datetime.datetime.today()
  52. nowTime_to_token=str(nowTime_to_token)
  53. #定义原字符串是目前时间加上手机号和密码
  54. get_user_str=str(phone+password+nowTime_to_token)
  55. #通过上面sha256加密原字符串
  56. get_token=_token_value(get_user_str)
  57. # 根据请求的手机号密码查询出用户
  58. inster_token = login_models.tbl_user.objects.filter(phone__contains=phone, password__contains=password)
  59. # 取出对象(查询到的用户数据),这个for可以不用因为唯一性的数据,直接索引,懒得改了
  60. for value in inster_token:
  61. #
  62. value.token_value=get_token
  63. #把上面的加密的token保存到这个用户数据库token_value字段中
  64. value.save()
  65.  
  66. user_list = []
  67. #取出对象(查询到的用户数据),这个for可以不用因为唯一性的数据,直接索引,懒得改了,其实上面已经取过了,懒得改
  68. #想把用户名取出来返回出去
  69. for users in inster_token:
  70. name_info=[users.user_name,users.token_value]
  71. user_list.append(name_info)
  72. usersInfo=user_list[0]
  73. # 返回字典
  74. datas = {
  75. 'status': 'true',
  76. 'message': '登录成功!',
  77. 'name':usersInfo[0],
  78. 'token':get_token
  79.  
  80. }
  81. # 字典转json返回给客户端
  82. return HttpResponse(get_json_Response.json_Response(datas),
  83. content_type="application/json,charset=utf-8")
  84. # 异常情况
  85. else:
  86. datas = {
  87. 'status': 'false',
  88. 'message': '手机号或密码不正确!',
  89. 'data': 'null'
  90.  
  91. }
  92.  
  93. return HttpResponse(get_json_Response.json_Response(datas),
  94. content_type="application/json,charset=utf-8")
  95.  
  96. # 异常情况 公共方法
  97.  
  98. else:
  99. return HttpResponse(get_Response_public.InvalidParameter(),
  100. content_type="application/json,charset=utf-8")
  101. # 异常情况 公共方法
  102. else:
  103. return HttpResponse(get_Response_public.InvalidParameter(), content_type="application/json,charset=utf-8")

1.1.设置路由 

 url.py

  1. """TestWebApi URL Configuration
  2.  
  3. The `urlpatterns` list routes URLs to views. For more information please see:
  4. https://docs.djangoproject.com/en/2.0/topics/http/urls/
  5. Examples:
  6. Function views
  7. 1. Add an import: from my_app import views
  8. 2. Add a URL to urlpatterns: path('', views.home, name='home')
  9. Class-based views
  10. 1. Add an import: from other_app.views import Home
  11. 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
  12. Including another URLconf
  13. 1. Import the include() function: from django.urls import include, path
  14. 2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
  15. """
  16. from django.conf.urls import url
  17. from django.contrib import admin
  18. from django.urls import path
  19.  
  20. # import上面写的类
  21. from ApiSoftware.loginApi.login_userIn import usr_login
  22.  
  23. urlpatterns = [
  24. path('admin/', admin.site.urls),
  25. url(r'login/userin/',usr_login().as_view()) #前面login/userin/自己定义访问路径,后面写类.as_view()
  1. ]

 1.2启动服务python manage.py runserver127.0.0.1:8100    测试写的post接口,postman调试工具

请求ok

2.写一个GET接口(带key的请求)

get_Students.py

  1. # coding:utf-8
  2. import json
  3. from django.http import HttpResponse
  4. from rest_framework.views import APIView
  5.  
  6. class getStudentDates(APIView):
  7.  
  8. def json_Response(self,dict_va):
  9.  
  10. respone_bodys=json.dumps(dict_va)
  11.  
  12. return respone_bodys
  13.  
  14. def get(self,request):
  15. # 取出url上sex和age参数的值
  16. sex = request.GET.get('sex')
  17. age = request.GET.get('age')
  18.  
  19. print(sex)
  20. print(age)
  21.  
  22. # 取出请求header中heelo的key值
  23. header_hello = request.META.get("HTTP_HELLO")
  24. print(header_hello)
  25.  
  26. datas = {
  27. "status":"ok",
  28. "students":[{"name":"小张","age":"20"},{"name":"小王","sex":"22"}],
  29. "message":"查询成功"
  30.  
  31. }
  32. return HttpResponse(self.json_Response(datas), content_type="application/json,charset=utf-8")

url.py

  1. """TestWebApi URL Configuration
  2.  
  3. The `urlpatterns` list routes URLs to views. For more information please see:
  4. https://docs.djangoproject.com/en/2.0/topics/http/urls/
  5. Examples:
  6. Function views
  7. 1. Add an import: from my_app import views
  8. 2. Add a URL to urlpatterns: path('', views.home, name='home')
  9. Class-based views
  10. 1. Add an import: from other_app.views import Home
  11. 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
  12. Including another URLconf
  13. 1. Import the include() function: from django.urls import include, path
  14. 2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
  15. """
  16. from django.conf.urls import url
  17. from django.contrib import admin
  18. from django.urls import path
  19.  
  20. from ApiSoftware.loginApi.get_Students import getStudentDates
  21.  
  22. urlpatterns = [
  23.  
  24. # 设置路由
  25. url(r'alldata/getstudent',getStudentDates().as_view()),
  26.  
  27. path('admin/', admin.site.urls),
  28.  
  29. ]

  

这是GET请求的一种url带指定key请求的方式,这里需要主要的是 header_hello = request.META.get("HTTP_HELLO"),我们定义了请求的header中有个hello参数,但是取值需要加上 HTTP_ 这样的写法,并且,hello参数尽管定义的大写,但是这里取值必须得大写,否者会取不到,下面看下cmd请求下的print

  1. E:\TestWebApi>python manage.py runserver 127.0.0.1:8100
  2. Performing system checks...
  3.  
  4. System check identified no issues (0 silenced).
  5. July 23, 2018 - 13:42:40
  6. Django version 2.0.6, using settings 'TestWebApi.settings'
  7. Starting development server at http://127.0.0.1:8100/
  8. Quit the server with CTRL-BREAK.
  9. 10
  10. 20
  11. word
  12. [23/Jul/2018 13:42:43] "GET /alldata/getstudent?sex=10&age=20 HTTP/1.1" 200 147

可以看到请求的值我们都print出来了

下面是postman的请求

这样带参数的url请求就结束了,这里返回的学生信息,直接写死的,理论上可以用前面写的一篇序列化数据库查询出来的数据

3.写一个GET请求(不带Key的请求)

直接上代码~

getstudets_NOKEY.py

  1. # coding:utf-8
  2. import json
  3. from django.http import HttpResponse
  4. from rest_framework.views import APIView
  5.  
  6. class getStudentDatesNokey(APIView):
  7.  
  8. # 写一个转json的小方法
  9. def json_Response(self,dict_va):
  10.  
  11. respone_bodys=json.dumps(dict_va)
  12.  
  13. return respone_bodys
  14.  
  15. # 写get请求,定义url上两个参数
  16. def get(self,request,param1,param2):
  17.  
  18. # 打印这两个参数,判断是否获取到
  19. print(param1)
  20. print(param2)
  21. #把获取的两个值放到dict,
  22. datas={
  23. "key":param1,
  24. "key1":param2
  25.  
  26. }
  27. # 返回json
  28. return HttpResponse(self.json_Response(datas), content_type='application/json; charset=utf-8')

  url.py 这里需要注意url有参数,所以定义url需要匹配后面的值

  1. """TestWebApi URL Configuration
  2.  
  3. The `urlpatterns` list routes URLs to views. For more information please see:
  4. https://docs.djangoproject.com/en/2.0/topics/http/urls/
  5. Examples:
  6. Function views
  7. 1. Add an import: from my_app import views
  8. 2. Add a URL to urlpatterns: path('', views.home, name='home')
  9. Class-based views
  10. 1. Add an import: from other_app.views import Home
  11. 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
  12. Including another URLconf
  13. 1. Import the include() function: from django.urls import include, path
  14. 2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
  15. """
  16. from django.conf.urls import url
  17. from django.contrib import admin
  18. from django.urls import path
  19.  
  20. from ApiSoftware.loginApi.getstudets_NOKEY import getStudentDatesNokey
  21.  
  22. urlpatterns = [
  23.  
  24. # plist后带两个参数用(.+)匹配任何字符除了/n
  25. url(r'plist/(.+)/(.+)/$', getStudentDatesNokey.as_view()),
  26.  
  27. path('admin/', admin.site.urls),
  28.  
  29. ]

  这样算是写好了,然后python manage.py runserver 127.0.0.1:8100,可以看到请求时,print的参数

  1. E:\TestWebApi>python manage.py runserver 127.0.0.1:8100
  2. Performing system checks...
  3.  
  4. System check identified no issues (0 silenced).
  5. July 23, 2018 - 18:47:37
  6. Django version 2.0.6, using settings 'TestWebApi.settings'
  7. Starting development server at http://127.0.0.1:8100/
  8. Quit the server with CTRL-BREAK.
  9. hello
  10. hello2
  11. [23/Jul/2018 18:47:38] "GET /plist/hello/hello2/ HTTP/1.1" 200 34

最后,postman请求

终于写完拉~  每次学完一些东西不记录,过两天又忘了,越往后学,这种情况越严重,所以记录每次学习的点点滴滴吧~    若有理解错误的地方,多多指教~

下一篇会写一些django在linux上部署后端的一些文档~!

[python]django rest framework写POST和GET接口的更多相关文章

  1. 使用django rest framework写POST和GET接口

    https://www.cnblogs.com/Jack-cx/p/9351633.html

  2. Python Django rest framework

    本节内容 Django rest framework 安装 Django rest framwwork 环境配置 简单举例说明 Django中使用 rest framework 1.1 安装 Djan ...

  3. Django Rest framework 框架

    一.开发模式: 1. 普通开发方式(前后端放在一起写) 2. 前后端分离(前后台通过ajaxo交互) 后端(django rest framework写的) <----ajaxo---> ...

  4. Django rest framework源码分析(一) 认证

    一.基础 最近正好有机会去写一些可视化的东西,就想着前后端分离,想使用django rest framework写一些,顺便复习一下django rest framework的知识,只是顺便哦,好吧. ...

  5. python django查询12306火车票

    逢年过节,想坐个高铁票,都得上12306去买票,但用过的都会发现,它会把临近站点的也筛出来了.但有时我们压根就不会考虑买到临近站点的. 另一方面,在购票高峰期,有可能你要的出发站到目的站都没有票了,这 ...

  6. python 全栈开发,Day96(Django REST framework 视图,django logging配置,django-debug-toolbar使用指南)

    昨日内容回顾 1. Serializer(序列化) 1. ORM对应的query_set和ORM对象转换成JSON格式的数据 1. 在序列化类中定义自定义的字段:SerializerMethodFie ...

  7. python 全栈开发,Day94(Promise,箭头函数,Django REST framework,生成json数据三种方式,serializers,Postman使用,外部python脚本调用django)

    昨日内容回顾 1. 内容回顾 1. VueX VueX分三部分 1. state 2. mutations 3. actions 存放数据 修改数据的唯一方式 异步操作 修改state中数据的步骤: ...

  8. 如何更优雅地写Django REST framework

    DRF(Django REST framework)是一个高度封装的框架,这导致想完成一件事情可以通过重写父类函数的方式从DRF的各个层次来写,都能够实现目的. 比如写视图函数,可以用继承APIVie ...

  9. 利用 Django REST framework 编写 RESTful API

    利用 Django REST framework 编写 RESTful API Updateat 2015/12/3: 增加 filter 最近在玩 Django,不得不说 rest_framewor ...

随机推荐

  1. Jmeter压测学习6---登录参数CSV

    前言 我们在压测登录接口的时候,如果只用一个账号去设置并发压测,这样的结果很显然是不合理的,一个用户并发无法模拟真实的情况.如果要压测登录接口,肯定得准备几百,甚至上千的账号去登录,测试的结果才具有可 ...

  2. 【MySQL数据库】MySQL5.7安装与配置、可视化工具安装和破解

    软件下载 Mysql5.7地址:https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.19-winx64.zip 安装步骤 下载后会得到zip ...

  3. Redis新旧复制

    在Redis中,用户可以通过执行SALVEOF命令,让一个服务器去复制另一个服务器. 127.0.0.1:12345> SLAVEOF 127.0.0.1 6379 OK 6379的奴隶是123 ...

  4. 通过Python收集MySQL MHA 部署及运行状态信息的功能实现

    一. 背景介绍 当集团的MySQL数据库实例数达到2000+.MHA集群规模数百个时,对MHA的及时.高效管理是DBA必须面对的一个挑战.MHA 集群 节点信息 和 运行状态 是管理的基础.本篇幅主要 ...

  5. Zookeeper原理系列-Paxos协议的原理和Zookeeper中的应用分析

    Paxo算法介绍 Paxos算法是莱斯利·兰伯特(Leslie Lamport)1990年提出的一种基于消息传递的一致性算法. Paxos产生背景 Paxos算法是基于消息传递且具有高度容错特性的一致 ...

  6. 11.4.5 LVS负载均衡常见工作模式总结以及ipvsadm

      NAT TUN DR RS any Tunneling Non-arp device RS network private LAN/WAN LAN RS number low(10-20) Hig ...

  7. 从零入门 Serverless | 教你 7 步快速构建 GitLab 持续集成环境

    作者 | 存诚 阿里云弹性计算团队 本文整理自<Serverless 技术公开课>,"Serverless"公众号后台回复"入门",即可获取系列文章 ...

  8. Visual Studio Docker调试端口设置

    一.前言 在Visual Studio 调试程序时,Docker中的容器端口和主机端口映射随机生成,导致每次调试都需要修改前端API接口的地址 二.解决方案 1.修改Docker调试启动参数,找到启动 ...

  9. 每日总结:Number&Math类(2021.10.4)

    Java语言为每一个内置数据类型提供了对应的包装类. 所有的包装类(Integer.Long.Byte.Double.Float.Short)都是抽象类Number的子类 其中Integer 对应的基 ...

  10. Flink Sql 之 Calcite Volcano优化器(源码解析)

    Calcite作为大数据领域最常用的SQL解析引擎,支持Flink , hive,  kylin , druid等大型项目的sql解析 同时想要深入研究Flink sql源码的话calcite也是必备 ...