Django-drf是什么
时间: 2024-04-28 10:21:51 浏览: 136
Django Rest Framework (DRF)是一个用于构建Web API的强大且灵活的工具包,它是Django的一个第三方应用程序。DRF基于Django的核心组件,提供了一系列用于创建、序列化和验证RESTful API的工具和方法,包括基于类的视图、序列化器、认证、权限、限流、版本控制等等。使用DRF,可以快速、轻松地构建RESTful API,并提供了完善的文档和测试工具,方便开发者进行API测试和文档编写。因此,DRF已成为Django社区中最受欢迎的Web API开发工具之一。
相关问题
django-drf搭建Elasticsearch
1. 安装Elasticsearch和Python Elasticsearch客户端
- Elasticsearch安装可以参考官网的[安装文档](https://www.elastic.co/guide/en/elasticsearch/reference/current/install-elasticsearch.html)
- Python Elasticsearch客户端可以使用pip安装:`pip install elasticsearch`
2. 在Django项目中创建一个app,用于处理与Elasticsearch相关的逻辑。
3. 配置Elasticsearch连接信息,可以在Django的`settings.py`中添加以下配置:
```
ELASTICSEARCH_DSL = {
'default': {
'hosts': 'localhost:9200'
},
}
```
其中,`hosts`就是Elasticsearch的地址,这里使用默认的`localhost:9200`。
4. 创建Elasticsearch索引模板,可以在app目录下创建一个`search_indexes.py`文件,定义索引模板:
```
from elasticsearch_dsl import Document, Text, Date, Keyword
class ArticleIndex(Document):
title = Text()
content = Text()
pub_date = Date()
tags = Keyword(multi=True)
class Index:
name = 'articles'
```
其中,`ArticleIndex`是一个继承自`Document`的类,定义了索引的字段和类型。`Index`类中的`name`属性指定了索引的名称。
5. 在app目录下创建`serializers.py`文件,定义序列化器,将模型序列化为Elasticsearch索引模板:
```
from rest_framework import serializers
from .models import Article
from .search_indexes import ArticleIndex
class ArticleIndexSerializer(serializers.ModelSerializer):
class Meta:
model = Article
fields = ('id', 'title', 'content', 'pub_date', 'tags')
def save(self, **kwargs):
article = super().save(**kwargs)
article_index = ArticleIndex(meta={'id': article.id}, **article.__dict__)
article_index.save()
return article
```
其中,`ArticleIndexSerializer`继承自`ModelSerializer`,定义了序列化的模型和字段。在`save`方法中,先保存模型,再将模型数据序列化为Elasticsearch索引模板,最后保存到Elasticsearch中。
6. 在app目录下创建`views.py`文件,定义视图函数,实现Elasticsearch搜索功能:
```
from rest_framework.views import APIView
from rest_framework.response import Response
from elasticsearch_dsl import Q
from .search_indexes import ArticleIndex
from .serializers import ArticleIndexSerializer
class ArticleSearchView(APIView):
def get(self, request):
query = request.query_params.get('q', '')
s = ArticleIndex.search().query(
Q('multi_match', query=query, fields=['title', 'content', 'tags'])
)
response = []
for hit in s.execute().hits:
serializer = ArticleIndexSerializer(data=hit.to_dict())
serializer.is_valid()
response.append(serializer.data)
return Response(response)
```
其中,`ArticleSearchView`继承自`APIView`,定义了一个`get`方法,接收`q`参数作为搜索关键词。通过Elasticsearch DSL构建查询语句,搜索索引模板中的数据,最后将搜索结果序列化返回。
7. 在app目录下创建`urls.py`文件,定义路由:
```
from django.urls import path
from .views import ArticleSearchView
urlpatterns = [
path('search/', ArticleSearchView.as_view(), name='article_search'),
]
```
其中,`search`路由对应了`ArticleSearchView`视图函数。
8. 在Django的`settings.py`中添加app,配置数据库信息:
```
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'app_name', # 添加app
]
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'db_name',
'USER': 'db_user',
'PASSWORD': 'db_password',
'HOST': 'localhost',
'PORT': '3306',
}
}
```
9. 在app目录下创建`models.py`文件,定义模型,使用Django ORM作为数据源:
```
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=255)
content = models.TextField()
pub_date = models.DateTimeField(auto_now_add=True)
tags = models.CharField(max_length=255, blank=True)
def __str__(self):
return self.title
```
其中,`Article`是一个继承自`models.Model`的类,定义了文章的属性。
10. 在app目录下创建`admin.py`文件,注册模型到Django Admin中:
```
from django.contrib import admin
from .models import Article
admin.site.register(Article)
```
11. 在Django的`urls.py`中添加app的路由:
```
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('api/', include('app_name.urls')),
]
```
12. 启动Django开发服务器,访问`http://localhost:8000/admin/`,进入Django Admin,创建一些文章数据。
13. 访问`http://localhost:8000/api/search/?q=django`,可以看到搜索结果,其中包含关键词`django`的文章数据。
django-drf和docker搭建Elasticsearch集群
Django DRF和Docker是两个不同的技术,它们分别用于Web开发框架和容器化部署。Elasticsearch是一个分布式搜索引擎,可以用于存储、搜索和分析大量数据。
如果您想在Django DRF应用程序中使用Elasticsearch进行搜索和分析,您可以使用Elasticsearch的Python客户端库elasticsearch-py,并将其安装到您的Django应用程序中。然后,您可以编写一些视图来与Elasticsearch进行交互,并使用Docker将Elasticsearch部署为集群。
以下是一些步骤来搭建Elasticsearch集群:
1. 安装Docker和Docker Compose。
2. 编写一个Docker Compose文件来定义您的Elasticsearch集群。例如,以下是一个使用3个节点的集群的示例:
```
version: '3'
services:
es01:
image: docker.elastic.co/elasticsearch/elasticsearch:7.8.0
container_name: es01
environment:
- node.name=es01
- discovery.seed_hosts=es02,es03
- cluster.initial_master_nodes=es01,es02,es03
- cluster.name=es-docker-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- esdata01:/usr/share/elasticsearch/data
ports:
- 9200:9200
networks:
- esnet
es02:
image: docker.elastic.co/elasticsearch/elasticsearch:7.8.0
container_name: es02
environment:
- node.name=es02
- discovery.seed_hosts=es01,es03
- cluster.initial_master_nodes=es01,es02,es03
- cluster.name=es-docker-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- esdata02:/usr/share/elasticsearch/data
networks:
- esnet
es03:
image: docker.elastic.co/elasticsearch/elasticsearch:7.8.0
container_name: es03
environment:
- node.name=es03
- discovery.seed_hosts=es01,es02
- cluster.initial_master_nodes=es01,es02,es03
- cluster.name=es-docker-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- esdata03:/usr/share/elasticsearch/data
networks:
- esnet
volumes:
esdata01:
esdata02:
esdata03:
networks:
esnet:
```
3. 运行Docker Compose命令来启动您的Elasticsearch集群。例如,以下命令将在后台启动集群:
```
$ docker-compose up -d
```
4. 确认您的集群已经启动。您可以使用以下命令来检查所有节点是否已经加入集群:
```
$ curl -X GET "localhost:9200/_cat/nodes?v&pretty"
```
5. 在您的Django应用程序中安装elasticsearch-py库。例如,以下命令将安装最新版本的elasticsearch-py:
```
$ pip install elasticsearch
```
6. 编写一些视图来与Elasticsearch集群进行交互。例如,以下视图将获取所有Elasticsearch集群中的文档:
```
from elasticsearch import Elasticsearch
from rest_framework.views import APIView
from rest_framework.response import Response
class ElasticsearchView(APIView):
def get(self, request):
es = Elasticsearch(['es01', 'es02', 'es03'])
res = es.search(index='my_index', body={'query': {'match_all': {}}})
return Response(res['hits']['hits'])
```
7. 在您的Django应用程序中定义Elasticsearch集群的连接参数。例如,以下设置将定义3个节点的Elasticsearch集群:
```
ELASTICSEARCH_DSL = {
'default': {
'hosts': [
'es01:9200',
'es02:9200',
'es03:9200'
]
},
}
```
8. 运行您的Django应用程序并测试您的Elasticsearch视图。例如,以下命令将启动Django开发服务器:
```
$ python manage.py runserver
```
9. 测试您的Elasticsearch视图。例如,以下命令将获取所有Elasticsearch集群中的文档:
```
$ curl -X GET "http://localhost:8000/elasticsearch/"
```
以上是一些步骤来搭建Elasticsearch集群并在Django DRF应用程序中使用它。请注意,这只是一个示例,您可能需要根据您自己的需求进行调整。
阅读全文