用Django开发简单的POST/GET接口

前情提要:

搭建Django环境   https://www.cnblogs.com/littlemonsterksn/p/14347772.html

用Django创建一个项目   https://www.cnblogs.com/littlemonsterksn/p/14354684.html

(接上)

一、开发POST接口

1. 在templates下面,新建一个HTML File,命名为login.html

2. 在login.html写一个简单的登录页面

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>login</title>
 6 </head>
 7 <body>
 8 <form action="/login/" method="POST">
 9     <h1>用户名:<input name="username"></h1>
10     <h1>密码:<input name="password"></h1>
11     <input type="submit" value="登录">
12 </form>
13 </body>
14 </html>

3.  在viwes里添加代码

从 http://127.0.0.1:8000/login 登录时,需要显示刚才编辑的的login.html这个登录页面,但这个页面一进来不是POST请求,就无法显示。所以这里需要加一个if-else判断,如果不是POST请求就把login.html这个页面返回去

 1 from django.shortcuts import render
 2 
 3 # Create your views here.
 4 from django.http.response import HttpResponse
 5 from django.shortcuts import render
 6 
 7 
 8 def Login(request):
 9     if request.method == 'POST':
10         username = request.POST.get('username')
11         return HttpResponse('This is first test')
12     else:
13         return render(request, 'login.html')

4. 在Settings的TEMPLATES的DIRS的[ ]内添加一行代码

'DIRS': [os.path.join(BASE_DIR, 'templates')],

5. 把Settings中MIDDLEWARE的这一行警报代码释掉

如果不注释的话,在登录后,页面会显示"Forbidden (403)"

6. 运行程序验证

输入用户名和密码,点击登录

页面返回了"This is first test",说明成功了

 用Fiddler测试,抓到了该接口,信息正确

二、开发GET接口

 1. 把views.py下面这几个地方稍作修改

 1 from django.shortcuts import render
 2 
 3 # Create your views here.
 4 from django.http.response import HttpResponse
 5 from django.shortcuts import render
 6 
 7 
 8 def Login(request):
 9     if request.method == 'GET':
10         username = request.GET.get('username')
11         return HttpResponse(username)
12     else:
13         return render(request, 'login.html')

2. 运行程序

在地址栏输入URL,返回了username的信息。测试成功。

三、数据序列化

1. 把返回的数据变成json格式

 1 from django.shortcuts import render
 2 
 3 # Create your views here.
 4 
 5 from django.http.response import HttpResponse
 6 from django.shortcuts import render
 7 import json
 8 
 9 
10 def Login(request):
11     if request.method == 'POST':
12         result = {}
13         username = request.POST.get('username')
14         mobile = request.POST.get('password')
15         # date = request.GET.get('date')
16         result['user'] = username
17         result['mobileNum'] = mobile
18         # result['date'] = date
19         result = json.dumps(result)
20 
21         return HttpResponse(result, content_type='application/json;charset=utf-8')  #数据以JSON的格式返回
22     else:
23         return render(request, 'login.html')

2. 运行验证

输入用户名、密码,点击登录

返回的数据确实是json格式的

 ==++==

遇到的问题&解决: 

问题1: 运行程序后,报错。报错信息 TypeError: render() missing 1 required positional argument: 'template_name'

版本信息是:

Django Version: 3.1.5

Python Version: 3.9.0

 解决方法:在import render后,return render时,需要添加上参数request

 修改后,再运行就没问题了

 
IN A WORLD LIKE THIS 萬物之中,希望至美;至美之物,永不凋零
原文地址:https://www.cnblogs.com/littlemonsterksn/p/14359828.html