6
6
7
7
![ s] ( ./res/web-application.png )
8
8
9
- 问题2:描述项目的物理架构。(上图中补充负载均衡(反向代理)服务器、数据库服务器、文件服务器、邮件服务器、缓存服务器、防火墙等,而且每个节点都有可能是多节点构成的集群,如下图所示)
9
+ 问题2:描述项目的物理架构。(上图中补充负载均衡(反向代理)服务器、数据库服务器、文件服务器、邮件服务器、缓存服务器、防火墙等,而且每个节点都有可能是多节点构成的集群,如下图所示,架构并不是一开始就是这样,而是逐步演进的 )
10
10
11
11
![ ] ( ./res/05.django_massive_cluster.png )
12
12
@@ -850,7 +850,7 @@ CACHES = {
850
850
' LOCATION' : [
851
851
' redis://1.2.3.4:6379/0' ,
852
852
],
853
- ' KEY_PREFIX' : ' fangtx ' ,
853
+ ' KEY_PREFIX' : ' teamproject ' ,
854
854
' OPTIONS' : {
855
855
' CLIENT_CLASS' : ' django_redis.client.DefaultClient' ,
856
856
' CONNECTION_POOL_KWARGS' : {
@@ -865,7 +865,7 @@ CACHES = {
865
865
' LOCATION' : [
866
866
' redis://1.2.3.4:6379/1' ,
867
867
],
868
- ' KEY_PREFIX' : ' fangtx :page' ,
868
+ ' KEY_PREFIX' : ' teamproject :page' ,
869
869
' OPTIONS' : {
870
870
' CLIENT_CLASS' : ' django_redis.client.DefaultClient' ,
871
871
' CONNECTION_POOL_KWARGS' : {
@@ -880,7 +880,7 @@ CACHES = {
880
880
' LOCATION' : [
881
881
' redis://1.2.3.4:6379/2' ,
882
882
],
883
- ' KEY_PREFIX' : ' fangtx :session' ,
883
+ ' KEY_PREFIX' : ' teamproject :session' ,
884
884
' TIMEOUT' : 1209600 ,
885
885
' OPTIONS' : {
886
886
' CLIENT_CLASS' : ' django_redis.client.DefaultClient' ,
@@ -896,7 +896,7 @@ CACHES = {
896
896
' LOCATION' : [
897
897
' redis://1.2.3.4:6379/3' ,
898
898
],
899
- ' KEY_PREFIX' : ' fangtx :api' ,
899
+ ' KEY_PREFIX' : ' teamproject :api' ,
900
900
' OPTIONS' : {
901
901
' CLIENT_CLASS' : ' django_redis.client.DefaultClient' ,
902
902
' CONNECTION_POOL_KWARGS' : {
@@ -1357,17 +1357,55 @@ REST_FRAMEWORK = {
1357
1357
```
1358
1358
1359
1359
``` Python
1360
- class EstateViewSet (CacheResponseMixin , ModelViewSet ):
1361
- # 通过queryset指定如何获取数据(资源)
1360
+ from django.utils.decorators import method_decorator
1361
+ from django.views.decorators.cache import cache_page
1362
+ from django_filters.rest_framework import DjangoFilterBackend
1363
+ from rest_framework.filters import OrderingFilter
1364
+ from rest_framework.generics import RetrieveAPIView, ListCreateAPIView
1365
+
1366
+ from api.serializers import EstateSerializer
1367
+ from common.models import Estate
1368
+
1369
+
1370
+ @method_decorator (decorator = cache_page(timeout = 120 , cache = ' api' , key_prefix = ' estates' ), name = ' get' )
1371
+ class EstateView (RetrieveAPIView , ListCreateAPIView ):
1362
1372
queryset = Estate.objects.all().select_related(' district' ).prefetch_related(' agents' )
1363
- # 通过serializer_class指定如何序列化数据
1364
1373
serializer_class = EstateSerializer
1365
- # 通过filter_backends指定如何提供筛选(覆盖默认的设置)
1366
- # filter_backends = (DjangoFilterBackend, OrderingFilter)
1367
- # 指定根据哪些字段进行数据筛选
1368
- filter_fields = (' district' , )
1369
- # 指定根据哪些字段对数据进行排序
1370
- ordering_fields = (' hot' , )
1374
+ filter_backends = (DjangoFilterBackend, OrderingFilter)
1375
+ filter_fields = (' name' , ' district' )
1376
+ ordering = (' -hot' , )
1377
+ ordering_fields = (' hot' , ' estateid' )
1378
+ ```
1379
+
1380
+ ``` Python
1381
+ from django_filters import rest_framework as drf
1382
+ from common.models import HouseInfo
1383
+
1384
+
1385
+ class HouseInfoFilter (drf .FilterSet ):
1386
+ """ 自定义房源数据过滤器"""
1387
+
1388
+ title = drf.CharFilter(lookup_expr = ' starts' )
1389
+ dist = drf.NumberFilter(field_name = ' district' )
1390
+ min_price = drf.NumberFilter(field_name = ' price' , lookup_expr = ' gte' )
1391
+ max_price = drf.NumberFilter(field_name = ' price' , lookup_expr = ' lte' )
1392
+ type = drf.NumberFilter()
1393
+
1394
+ class Meta :
1395
+ model = HouseInfo
1396
+ fields = (' title' , ' district' , ' min_price' , ' max_price' , ' type' )
1397
+ ```
1398
+
1399
+ ``` Python
1400
+ class HouseInfoViewSet (CacheResponseMixin , ReadOnlyModelViewSet ):
1401
+ queryset = HouseInfo.objects.all() \
1402
+ .select_related(' type' , ' district' , ' estate' , ' agent' ) \
1403
+ .prefetch_related(' tags' ).order_by(' -pubdate' )
1404
+ serializer_class = HouseInfoSerializer
1405
+ filter_backends = (DjangoFilterBackend, OrderingFilter)
1406
+ filterset_class = HouseInfoFilter
1407
+ ordering = (' price' ,)
1408
+ ordering_fields = (' price' , ' area' )
1371
1409
```
1372
1410
1373
1411
#### 身份认证
0 commit comments