写点什么

软件测试 / 测试开发 / 全日制 |Python 全栈开发:构建基于 GraphQL 的现代 Web 应用

  • 2024-01-08
    北京
  • 本文字数:3847 字

    阅读完需:约 13 分钟

霍格沃兹测试开发学社推出了《Python 全栈开发与自动化测试班》。本课程面向开发人员、测试人员与运维人员,课程内容涵盖 Python 编程语言、人工智能应用、数据分析、自动化办公、平台开发、UI 自动化测试、接口测试、性能测试等方向。为大家提供更全面、更深入、更系统化的学习体验,课程还增加了名企私教服务内容,不仅有名企经理为你 1v1 辅导,还有行业专家进行技术指导,针对性地解决学习、工作中遇到的难题。让找工作不再是难题,并且能助力你拿到更好的绩效与快速晋升。

GraphQL 是一种用于 API 的查询语言和服务器端运行时环境,其灵活性和强大性能使其成为现代 Web 应用开发中的热门选择。本文将介绍如何使用 Python 全栈开发构建基于 GraphQL 的现代 Web 应用,实现前后端数据交互的灵活性和效率。

1. GraphQL 简介

1.1 什么是 GraphQL?

介绍 GraphQL 的基本概念,包括查询语言和服务器端的执行环境。

1.2 GraphQL 与 REST 的对比

讨论 GraphQL 相对于传统 REST API 的优势,包括精确的数据查询和减少多次请求的需求。

2. 后端搭建与 GraphQL 配置

2.1 选择后端框架

介绍选择合适的后端框架,如 Django、Flask、FastAPI 等,并搭建基本的后端结构。

2.2 配置 GraphQL 服务

使用图形化的方式配置 GraphQL 服务,定义数据模型和相应的查询和变更。

# 以Django为例,在`schema.py`中定义GraphQL Schema
import graphene
class UserType(graphene.ObjectType): id = graphene.ID() username = graphene.String() email = graphene.String()
class Query(graphene.ObjectType): user = graphene.Field(UserType, id=graphene.ID())
def resolve_user(self, info, id): # 从数据库中获取用户数据 user_data = get_user_by_id(id) return UserType(**user_data)
schema = graphene.Schema(query=Query)
复制代码

2.3 集成 GraphQL 到后端应用

将 GraphQL 集成到后端应用中,处理前端发送的 GraphQL 请求。

# 以Django为例,在`views.py`中处理GraphQL请求
from django.http import JsonResponsefrom django.views.decorators.csrf import csrf_exemptfrom graphene_django.views import GraphQLView
@csrf_exemptdef graphql_view(request): response = GraphQLView.as_view(graphiql=True, schema=schema)(request) return response
复制代码

3. 前端集成与 GraphQL 查询

3.1 选择前端框架

介绍选择合适的前端框架,如 React、Vue、Angular 等,并搭建基本的前端结构。

3.2 集成 Apollo Client

使用 Apollo Client 作为 GraphQL 的客户端库,实现前端与后端的数据交互。

// 在React中使用Apollo Client
import React from 'react';import { ApolloProvider, ApolloClient, InMemoryCache } from '@apollo/client';import { gql } from '@apollo/client';
const client = new ApolloClient({ uri: 'http://localhost:8000/graphql', cache: new InMemoryCache(),});
const App = () => { // 发送GraphQL查询 const { loading, error, data } = useQuery( gql` query { user(id: "1") { id username email } } `, );
if (loading) return <p>Loading...</p>; if (error) return <p>Error: {error.message}</p>;
return ( <div> <p>User ID: {data.user.id}</p> <p>Username: {data.user.username}</p> <p>Email: {data.user.email}</p> </div> );};
const WrappedApp = () => ( <ApolloProvider client={client}> <App /> </ApolloProvider>);
export default WrappedApp;
复制代码

4. GraphQL 的变更与数据提交

4.1 定义变更操作

在 GraphQL Schema 中定义相应的变更操作,例如创建、更新、删除数据等。

# 在`schema.py`中定义变更操作
class CreateUser(graphene.Mutation): class Arguments: username = graphene.String() email = graphene.String()
user = graphene.Field(UserType)
def mutate(self, info, username, email): user = create_user(username, email) return CreateUser(user=user)
class Mutation(graphene.ObjectType): create_user = CreateUser.Field()
schema = graphene.Schema(query=Query, mutation=Mutation)
复制代码

4.2 前端数据提交

在前端使用useMutation hook 提交变更操作。

// 在React中使用useMutation hook
import React from 'react';import { useMutation } from '@apollo/client';import { gql } from '@apollo/client';
const CREATE_USER = gql` mutation CreateUser($username: String!, $email: String!) { createUser(username: $username, email: $email) { user { id username email } } }`;
const CreateUserForm = () => { const [createUser, { data }] = useMutation(CREATE_USER);
const handleSubmit = (event) => { event.preventDefault();
createUser({ variables: { username: event.target.username.value, email: event.target.email.value, }, }); };
return ( <form onSubmit={handleSubmit}> <label> Username: <input type="text" name="username" /> </label> <label> Email: <input type="text" name="email" /> </label> <button type="submit">Create User</button> </form> );};
export default CreateUserForm;
复制代码

5. 实现实时数据更新与订阅

5.1 GraphQL 订阅概述

介绍 GraphQL 订阅的基本概念,实现实时数据更新。

5.2 后端实现 GraphQL 订阅

在后端配置 GraphQL 订阅的支持。

# 在`schema.py`中定义订阅操作
class Subscription(graphene.ObjectType): user_created = graphene.Field(UserType)
async def resolve_user_created(root, info): # 使用异步迭代器推送新用户数据 async for event in user_created_subscription(): yield CreateUser(user=event)
复制代码

5.3 前端订阅实时数据

在前端使用useSubscription hook 实现对订阅数据的实时更新。

// 在React中使用useSubscription hook
import React from 'react';import { useSubscription } from '@apollo/client';import { gql } from '@apollo/client';
const USER_CREATED_SUBSCRIPTION = gql` subscription { userCreated { user { id username email } } }`;
const RealtimeUserList = () => { const { data } = useSubscription(USER_CREATED_SUBSCRIPTION);
if (!data) return null;
const newUser = data.userCreated.user;
return ( <div> <p>New User Created:</p> <p>ID: {newUser.id}</p> <p>Username: {newUser.username}</p> <p>Email: {newUser.email}</p> </div> );};
export default RealtimeUserList;
复制代码

6. 安全性与权限控制

6.1 安全性考虑

深入讨论 GraphQL 中的安全性问题,包括防止恶意查询和变更等。

6.2 权限控制

在 GraphQL Schema 中定义和使用权限控制,确保只有授权用户能够执行敏感操作。

7. 前后端性能优化

7.1 数据加载与批量查询

学习如何使用 DataLoader 等工具实现数据的批量加载,减少查询次数。

7.2 缓存与性能优化

在前端使用 Apollo Client 的缓存机制,合理配置后端 GraphQL 服务的缓存。

8. 实践:构建一个完整的 GraphQL 应用

8.1 项目结构设计

设计并组织一个具有完整功能的 GraphQL 应用的项目结构。

8.2 实现核心功能

分步实现应用的核心功能,包括查询、变更、订阅等。

结论

通过本文的学习,你将掌握如何使用 Python 全栈开发构建基于 GraphQL 的现代 Web 应用。GraphQL 的灵活性和强大性能使其成为前后端数据交互的理想选择,而 Python 全栈开发框架的丰富生态系统为其提供了强大的支持。构建 GraphQL 应用将为你的项目提供更灵活、高效和易于维护的数据交互解决方案。

推荐

Python 全栈开发与自动化测试开发班

由浅入深实战进阶,从小白到高手

以 Python 全栈开发为基础,深入教授自动化测试技能,为学员打造全面的技术能力。通过系统学习和实际项目实战,学员将具备在职场中脱颖而出的竞争力。不仅能够灵活运用 Python 进行开发,还能够保障项目质量通过自动化测试手段。这是一个全面提升职业竞争力的机会。

课程详情

Python 开发必备基础技能与项目实战

Pvthon 编程语言/算法和数据结构/面向对象编程 Web 后端开发/前端开发/测试管理平台项目实战

人工智能 ChatGPT 实战

人工智能辅助学习各种开发和测试技能/Pytorch 深度学框架/平台开发实战

数据分析与自动化办公

数据采集/Pandas 与数据处理技术/ECharts 与数据可视化技术/爬虫实战/自动化办公/批量文件处理

UI 自动化测试与高级项目实战

Web 自动化测试/App 自动化测试/ PageObject 设计模式

接口自动化测试

接口协议分析/Mock 实战/服务端接口测试

性能测试

性能测试流程与方法/JMeter 脚本参数化/Grafana 监控系统搭建

简历指导与模拟面试

1V1 简历指导/模拟真实面试/测试开发岗面试全攻略名企私教服务

名企专家 1v1 辅导/行业专家技术指导/针对性解决工作难题/绩效提升辅导与晋升复盘

课程亮点

名企私教服务 先学习后付费 高额奖学金

专属社群+晚自习在线答疑

5V1 全方位辅导作业+考试强化学习效果

简历修改 模拟面试 就业内推 面试复盘

领取人工智能学习资料,请点击!!!

用户头像

社区:ceshiren.com 微信:ceshiren2023 2022-08-29 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料、实事更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬

评论

发布
暂无评论
软件测试/测试开发/全日制 |Python全栈开发:构建基于GraphQL的现代Web应用_测试_测吧(北京)科技有限公司_InfoQ写作社区