使用react和django3构建应用

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时计算 Flink 版,5000CU*H 3个月
简介: 【6月更文挑战第3天】首先,创建Django项目和todos应用,安装必要依赖,配置settings.py并建立数据库模型。通过makemigrations和migrate更新数据库。接着,设置REST_FRAMEWORK的权限为AllowAny,构建API的urls, views, serializers。在todos应用中定义ListTodo和DetailTodo视图,以及TodoSerializer。对于跨域资源共享(CORS),通过django-cors-headers中间件配置白名单。

简介

该文介绍了前后端分离时,后端Django API与前端React的结合方法。并使用Django REST Framework提供了序列化器和视图,简化了API构建,而CORS配置确保了跨域访问的安全性。

由此清晰的看见,前后端分离时, 后端api 与 前端react如何结合。

1 全局环境创建

后端环境初始化,如果需要在新建的backend 虚拟化环境进行操作,重新安装django,否则django-admin 无效

 pip install install django~=3.1.0
 django-admin startproject config .

 python manage.py startapp todos
 python manage.py migrate

注册到全局配置

 config/setting.py
     # Local
    INSTALLED_APPS = ['todos', # new]

创建models,todos/models.py
from django.db import models
class Todo(models.Model):
title = models.CharField(max_length=200)
body = models.TextField()
def str(self):
return self.title

更新库,创建迁移。

生成的单个迁移文件将包含两个应用程序上的数据。这只会增加调试难度。尽量减少迁移

python manage.py makemigrations todos
python manage.py makemigrations  # 不指定app时,将迁移所有有改动的app
python manage.py migrate  

如果我们进入管理员不会立即显示我们的Todos应用程序。我们需要更改todos/admin.py文件如下
创建3个todos,然后为它们创建 web 页面,这需要新建 urls,views,templates

注册应用

INSTALLED_APPS = [ # 3rd party
                'rest_framework',
                'todos', 
                    ]
  • 设置权限为 允许全部

隐式设计默认设置是为了使开发人员可以进入并开始在本地快速工作开发环境。但是,默认设置不适用于生产。

所以通常,我们会在项目过程中对它们进行一些更改

REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': [
            'rest_framework.permissions.AllowAny', ] }

AllowAny是其中之一,这意味着当我们显式设置它时,与上面的操作一样,其效果与没有DEFAULT_PERMISSION_CLASSES配置的情况完全相同 。

后端api服务 需要三个部分 urls.py, views.py, and serializers.py
不需要 template

2 构建路由视图和序列化: urls, views, serializers

全局urls

# config/urls.py
    from django.contrib import admin
    from django.urls import include, path # new
        urlpatterns = [
            path('admin/', admin.site.urls),
            path('api/', include('todos.urls')), # new
            ]

应用app的 路由配置

# todos/urls.py
    from django.urls import path
    from .views import ListTodo, DetailTodo
    urlpatterns = [
            path('<int:pk>/', DetailTodo.as_view()),
            path('', ListTodo.as_view()),
    ]

我们引用的还有两个尚未创建的视图:ListTodo和DetailTodo。

但是,路由已完成。空字符串''处将有所有待办事项的列表,其他api/上的单词。每个待办事项都将在其主键上可用,这是一个值Django会在每个数据库表中自动设置。第一个条目是1,第二个条目是2,依此类推。

因此,我们的第一个待办事项最终将位于API端点api/1/

现在,我们需要将模型中的数据转换为JSON,在URL上输出。

因此,我们需要一个序列化器restful框架有强大的内建序列化类 serializers

# todos/serializers.py
    from rest_framework import serializers
    from .models import Todo
    class TodoSerializer(serializers.ModelSerializer):
        class Meta:
            model = Todo
            fields = ('id', 'title', 'body',)

我们正在指定要使用的模型以及具体的我们要公开的字段。请记住,id是由Django自动创建的。

因此我们没有必须在我们的Todo模型中定义它,但是我们将在细节视图中使用它。

  • Views

views.py 在 django中 是将数据发送到 templates,在rest框架中 其值将被发送到序列化操作类中。

Django REST Framework视图的语法故意与常规Django视图非常相似就像常规Django一样,Django REST Framework附带了通用视图以供通用案件。这就是我们在这里使用的。

我们将使用两个视图来展示数据 ListAPIView 显示所有的 todos ,
RetrieveAPIView显示单个实例

这里有重复每个视图的queryset和serializer_class的代码,即使扩展的通用视图是不同的。
在 后面,我们将学习解决该问题的视图集和路由器,并允许我们使用更少的代码来创建相同的API视图和URL。

3 跨域资源共享 CORS Cross-Origin Resource Sharing

当用户从不同站点或 同一个站点的不同位置访问时,需要配置此项。否则造成访问错误。
比如mysite.com vs yousite.cn, 或者 localhost:2000 vs localhost:3000

启用配置:

使用django-rest-framwork 中间件 django-cors-headers

1.在全局配置文件中添加相关配置即可。

config/settings.py

添加corsheaders 到 INSTALLED_APPS

在MIDDLEWARE的CommonMiddleWare上方添加CorsMiddleware
这个位置很重要,因为加载是从上到下加载

2,创建白名单:

CORS_ORIGIN_WHITELIST = ( 
    'http://192.168.3.12:3000',
    'http://localhost:8000',)

4 小结

从传统Django需要的唯一组件是models.py文件,urls.py路由。 views.py和serializers.py文件完全是Django REST Framework

重要的是 通过配置 CORS headers 白名单只允许两个域访问我们的api,这是新手最简单重要的方式。
然后添加一点Django REST Framework的序列化器和视图提供的魔力。

目录
相关文章
|
4月前
|
前端开发
深入解析React Hooks:构建高效且可维护的前端应用
本文将带你走进React Hooks的世界,探索这一革新特性如何改变我们构建React组件的方式。通过分析Hooks的核心概念、使用方法和最佳实践,文章旨在帮助你充分利用Hooks来提高开发效率,编写更简洁、更可维护的前端代码。我们将通过实际代码示例,深入了解useState、useEffect等常用Hooks的内部工作原理,并探讨如何自定义Hooks以复用逻辑。
|
3月前
|
监控 JavaScript 前端开发
如何在实际应用中测试和比较React和Vue的性能?
总之,通过多种方法的综合运用,可以相对客观地比较 React 和 Vue 在实际应用中的性能表现,为项目的选择和优化提供有力的依据。
55 1
|
3月前
|
前端开发 JavaScript 开发者
使用React和Redux构建高效的前端应用
使用React和Redux构建高效的前端应用
66 1
|
3月前
|
前端开发 JavaScript 开发者
从零开始构建你的第一个React应用
从零开始构建你的第一个React应用
40 2
|
4月前
|
IDE 关系型数据库 MySQL
Django学习一:创建Django框架,介绍Django的项目结构和开发逻辑。创建应用,编写主包和应用中的helloworld
这篇文章是关于如何创建一个Django框架,介绍Django的项目结构和开发逻辑,并指导如何创建应用和编写“Hello, World!”程序的教程。
256 3
Django学习一:创建Django框架,介绍Django的项目结构和开发逻辑。创建应用,编写主包和应用中的helloworld
|
3月前
|
资源调度 前端开发 数据可视化
构建高效的数据可视化仪表板:D3.js与React的融合之道
【10月更文挑战第25天】在数据驱动的时代,将复杂的数据集转换为直观、互动式的可视化表示已成为一项至关重要的技能。本文深入探讨了如何结合D3.js的强大可视化功能和React框架的响应式特性来构建高效、动态的数据可视化仪表板。文章首先介绍了D3.js和React的基础知识,然后通过一个实际的项目案例,详细阐述了如何将两者结合使用,并提供了实用的代码示例。无论你是数据科学家、前端开发者还是可视化爱好者,这篇文章都将为你提供宝贵的洞见和实用技能。
89 5
|
3月前
|
监控 前端开发 JavaScript
确保 React 应用在出现错误时仍然能够保持响应式
【10月更文挑战第25天】可以有效地确保React应用在出现错误时仍然能够保持响应式,为用户提供更加稳定、可靠的使用体验。在实际应用中,需要根据项目的具体情况和需求,综合运用这些方法,并不断优化和完善错误处理机制,以适应不断变化的业务场景和用户需求
|
4月前
|
前端开发 JavaScript 测试技术
React 高阶组件 (HOC) 应用
【10月更文挑战第16天】高阶组件(HOC)是 React 中一种复用组件逻辑的方式,通过接受一个组件并返回新组件来实现。本文介绍了 HOC 的基础概念、核心功能和常见问题,包括静态方法丢失、ref 丢失、多个 HOC 组合和 props 冲突的解决方案,并提供了具体的 React 代码示例。通过本文,读者可以更好地理解和应用 HOC,提高代码的复用性和可维护性。
121 8
|
3月前
|
前端开发 JavaScript Android开发
掌握React Native,构建跨平台移动应用的利器
掌握React Native,构建跨平台移动应用的利器
|
3月前
|
前端开发 JavaScript API
React Native实战:构建跨平台移动应用
React Native实战:构建跨平台移动应用
59 0