Flutter Django REST Framework客户端插件django_rest_framework_client的使用

发布于 1周前 作者 ionicwang 来自 Flutter

Flutter Django REST Framework客户端插件django_rest_framework_client的使用

简介

本项目实现了与使用Django Rest Framework的后端进行身份验证和REST API连接的完整实现。

包安装

前往pub.dev下载并安装drf_client包。在你的pubspec.yaml文件中添加以下依赖项:

dependencies:
  drf_client: ^版本号

运行flutter pub get来获取新的依赖项。

示例代码

示例代码:main.dart
import 'package:flutter/material.dart';
import 'package:django_rest_framework_client/django_rest_framework_client.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'DRF Client',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.green),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'DRF Client'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  // 初始化DRFApi实例,设置API的基本URL
  final DRFApi api = DRFApi('https://smartlib.tijorat.org/api/v1', usernameField: 'mobile');

  // 存储请求结果的字符串
  String responseText = '';

  // 控制器用于输入用户名和密码
  TextEditingController usernameController = TextEditingController();
  TextEditingController passwordController = TextEditingController();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: const Text("DRF Client"),
      ),
      body: ListView(
        children: [
          // 按钮用于发起GET请求
          ElevatedButton(
            onPressed: () => _makeGetRequest(),
            child: const Text('GET Request'),
          ),
          const SizedBox(height: 20),
          // 显示请求结果
          Text(responseText),
        ],
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () async {
          // 调用api的login方法进行登录
          String res = await api.login("998", "");

          debugPrint(res);
          if (context.mounted) {
            // 显示登录结果的SnackBar
            _showSnackBar(context, res);
          }
        },
        child: const Icon(Icons.add),
      ),
    );
  }

  // 发起GET请求的方法
  Future<void> _makeGetRequest() async {
    try {
      // 调用api的get方法获取数据
      final response = await api.get('books/books');
      setState(() {
        // 更新UI显示响应体
        responseText = response.body;
      });
    } catch (e) {
      // 处理异常情况
      setState(() {
        responseText = 'Error: ${e.toString()}';
      });
    }
  }

  // 显示SnackBar的方法
  void _showSnackBar(BuildContext context, String message) {
    ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(message)));
  }
}

更多关于Flutter Django REST Framework客户端插件django_rest_framework_client的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter Django REST Framework客户端插件django_rest_framework_client的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,作为一个IT专家,我可以为你提供一个使用Flutter与Django REST Framework进行集成的代码案例,特别是通过django_rest_framework_client(虽然这不是一个标准的Flutter插件名称,但我会假设你是指使用Flutter的网络请求库如diohttp来与Django REST Framework的API进行交互)。

在Flutter中,我们通常会使用diohttp库来发送HTTP请求到Django REST Framework的后端。以下是一个使用dio库的示例,它展示了如何从Flutter前端发送GET和POST请求到Django REST Framework后端。

首先,确保在你的pubspec.yaml文件中添加dio依赖:

dependencies:
  flutter:
    sdk: flutter
  dio: ^4.0.0  # 请检查最新版本号

然后运行flutter pub get来安装依赖。

接下来,你可以创建一个Dart文件来处理API请求,例如api_service.dart

import 'package:dio/dio.dart';

class ApiService {
  final Dio dio;

  ApiService() : dio = Dio() {
    dio.options.baseUrl = 'http://your-django-backend-url.com/api/'; // 替换为你的Django后端URL
    dio.options.headers['Content-Type'] = 'application/json';
    // 如果你的Django后端启用了CSRF保护,你可能需要在这里发送CSRF token
    // dio.options.headers['X-CSRFToken'] = 'your-csrf-token';
  }

  // 发送GET请求
  Future<dynamic> getEndpoint(String endpoint) async {
    try {
      Response response = await dio.get(endpoint);
      return response.data;
    } catch (error) {
      throw error;
    }
  }

  // 发送POST请求
  Future<dynamic> postEndpoint(String endpoint, Map<String, dynamic> payload) async {
    try {
      Response response = await dio.post(endpoint, data: payload);
      return response.data;
    } catch (error) {
      throw error;
    }
  }
}

在你的Flutter应用中,你可以这样使用这个ApiService类:

import 'package:flutter/material.dart';
import 'api_service.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Django REST Framework Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final ApiService apiService = ApiService();
  String dataFromApi = '';

  @override
  void initState() {
    super.initState();
    fetchData();
  }

  void fetchData() async {
    try {
      // 替换为实际的API端点
      String endpoint = 'your-endpoint/'; 
      dynamic responseData = await apiService.getEndpoint(endpoint);
      setState(() {
        dataFromApi = responseData.toString(); // 根据你的API响应格式处理数据
      });
    } catch (error) {
      print(error);
    }
  }

  void postData() async {
    try {
      // 替换为实际的API端点和数据
      String endpoint = 'your-post-endpoint/';
      Map<String, dynamic> payload = {
        'key1': 'value1',
        'key2': 'value2',
      };
      dynamic responseData = await apiService.postEndpoint(endpoint, payload);
      print(responseData); // 处理POST请求的响应
    } catch (error) {
      print(error);
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Django REST Framework Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text('Data from API:'),
            Text(dataFromApi),
            ElevatedButton(
              onPressed: postData,
              child: Text('Send POST Request'),
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中,ApiService类封装了与Django REST Framework后端交互的逻辑。MyHomePage是一个简单的Flutter页面,它在初始化时发送一个GET请求,并在按钮点击时发送一个POST请求。

请注意,这只是一个基本的示例,实际项目中可能需要处理更多的细节,比如错误处理、认证、数据解析等。根据你的具体需求,你可能还需要进一步配置dio实例,比如添加拦截器来处理认证token的自动刷新等。

回到顶部