Django请求第三方api接口


前言

我们经常在前端写一些ajax请求但是一直出现跨域的问题,所以我们就把目标放到了后端,可是发现根本不知道怎么去使用第三方接口


提示:以下是本篇文章正文内容,我们就用名人名言的api作为案例

1.创建view视图

这一步是为了在后端将数据请求到,我们直接上代码

# 名人名言接口
def famous(request):
    url = 'https://v1.alapi.cn/api/mingyan'  #api链接
    '''
        我用的这个接口没有什么apikey或者参数
        如果有的话直接写上参数,类似于这样
        apikey = 'chgaxvsf88f3858a15fa4426f4cbdd4d2a02b92ee0747f3'
        area = "人生"
        areaID = "45"
        data = {
            "apiKey":apikey,
            "area":area,
            "areaID":areaID,
            }
        将数据封装成人家接口定义的格式,请求数据改成以下样子
        wb_data = requests.get(url,apikey,data)
    '''
    wb_data = requests.get(url)  #引入requests库来请求数据
    result = wb_data.json()   #将请求的数据转换为json格式
    return JsonResponse(json.dumps(result), safe=False)   #用json响应出去,顺便格式化数据

2.然后编写url用来前后端交互数据

url:

    path('famous/', views.famous, name='famous')

然后在你需要用到的页面,用ajax请求数据(我这里是jq)

 $.ajax({
    url:"{% url 'famous' %} ",
    type:"get",
    contentType: "application/json;charset=UTF-8",
    dataType:"json",
    success:function (data) {
      let famous_data = jQuery.parseJSON(data);
      $(".one-poem").html(famous_data.data.content)
    }

下面就是响应到的数据
在这里插入图片描述

3.可能出现的bug

在这里插入图片描述
此错误的意思是响应的对象不可序列化
所以我们一定要先把响应结果转为json,再去格式化响应内容,也就是
先转换为json格式
在这里插入图片描述
然后再格式化数据,
在这里插入图片描述
最后才发送出去数据
在这里插入图片描述

  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要实现Google第三方登录验证,可以按照以下步骤: 1. 创建Google API项目并获取客户端ID和客户端密钥。 - 在 Google Cloud Console 中创建项目。 - 在“凭据”页面上创建OAuth 2.0客户端ID。 - 下载凭据并将其保存到项目中。 2. 安装必要的Python包: ``` pip install google-auth google-auth-oauthlib google-auth-httplib2 ``` 3. 在Django项目中,创建一个文件 `google_auth.py` 并添加以下代码: ``` from google.oauth2 import id_token from google.auth.transport import requests def validate_google_token(token): try: # Specify the CLIENT_ID of the app that accesses the backend: idinfo = id_token.verify_oauth2_token(token, requests.Request(), 'CLIENT_ID') # ID token is valid. Return the user's Google Account details. return idinfo except ValueError: # Invalid token return None ``` 注意:在上述代码中,需要将字符串 `CLIENT_ID` 替换为你的Google客户端ID。 4. 创建视图函数,用于处理Google登录请求: ``` from django.shortcuts import redirect from django.urls import reverse def google_login(request): # Create a state token to prevent request forgery. # Store it in the session for later validation. state = uuid.uuid4().hex request.session['state'] = state # Set the client ID, token state, and application name in the HTML while # serving it. google_auth_url = 'https://accounts.google.com/o/oauth2/auth?' \ 'response_type=code&client_id={}&redirect_uri={}&' \ 'scope=openid%20email%20profile&state={}'.format( 'CLIENT_ID', request.build_absolute_uri(reverse('google_authenticate')), state) return redirect(google_auth_url) ``` 注意:在上述代码中,需要将字符串 `CLIENT_ID` 替换为你的Google客户端ID。 5. 创建另一个视图函数,用于验证Google登录并返回用户信息: ``` def google_authenticate(request): # Verify the state token if request.GET.get('state') != request.session.get('state'): return HttpResponseBadRequest('Invalid session state.') # Exchange authorization code for access token params = { 'code': request.GET.get('code'), 'client_id': 'CLIENT_ID', 'client_secret': 'CLIENT_SECRET', 'redirect_uri': request.build_absolute_uri(reverse('google_authenticate')), 'grant_type': 'authorization_code' } response = requests.post('https://oauth2.googleapis.com/token', data=params) token_data = response.json() # Validate and decode ID token id_token = token_data.get('id_token') idinfo = validate_google_token(id_token) # Return user info return JsonResponse({ 'email': idinfo.get('email'), 'first_name': idinfo.get('given_name'), 'last_name': idinfo.get('family_name'), 'picture_url': idinfo.get('picture') }) ``` 注意:在上述代码中,需要将字符串 `CLIENT_ID` 和 `CLIENT_SECRET` 替换为你的Google客户端ID和客户端密钥。 6. 在 `urls.py` 中添加以下路由: ``` from django.urls import path from .views import google_login, google_authenticate urlpatterns = [ path('google/login/', google_login, name='google_login'), path('google/authenticate/', google_authenticate, name='google_authenticate'), ] ``` 7. 在模板中添加登录按钮,点击该按钮将跳转到Google登录页面: ``` <a href="{% url 'google_login' %}">Log in with Google</a> ``` 以上就是实现Django中Google第三方登录验证的步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值