66
77![ s] ( ./res/web-application.png )
88
9- 问题2:描述项目的物理架构。(上图中补充负载均衡(反向代理)服务器、数据库服务器、文件服务器、邮件服务器、缓存服务器、防火墙等,而且每个节点都有可能是多节点构成的集群,如下图所示)
9+ 问题2:描述项目的物理架构。(上图中补充负载均衡(反向代理)服务器、数据库服务器、文件服务器、邮件服务器、缓存服务器、防火墙等,而且每个节点都有可能是多节点构成的集群,如下图所示,架构并不是一开始就是这样,而是逐步演进的 )
1010
1111![ ] ( ./res/05.django_massive_cluster.png )
1212
@@ -850,7 +850,7 @@ CACHES = {
850850 ' LOCATION' : [
851851 ' redis://1.2.3.4:6379/0' ,
852852 ],
853- ' KEY_PREFIX' : ' fangtx ' ,
853+ ' KEY_PREFIX' : ' teamproject ' ,
854854 ' OPTIONS' : {
855855 ' CLIENT_CLASS' : ' django_redis.client.DefaultClient' ,
856856 ' CONNECTION_POOL_KWARGS' : {
@@ -865,7 +865,7 @@ CACHES = {
865865 ' LOCATION' : [
866866 ' redis://1.2.3.4:6379/1' ,
867867 ],
868- ' KEY_PREFIX' : ' fangtx :page' ,
868+ ' KEY_PREFIX' : ' teamproject :page' ,
869869 ' OPTIONS' : {
870870 ' CLIENT_CLASS' : ' django_redis.client.DefaultClient' ,
871871 ' CONNECTION_POOL_KWARGS' : {
@@ -880,7 +880,7 @@ CACHES = {
880880 ' LOCATION' : [
881881 ' redis://1.2.3.4:6379/2' ,
882882 ],
883- ' KEY_PREFIX' : ' fangtx :session' ,
883+ ' KEY_PREFIX' : ' teamproject :session' ,
884884 ' TIMEOUT' : 1209600 ,
885885 ' OPTIONS' : {
886886 ' CLIENT_CLASS' : ' django_redis.client.DefaultClient' ,
@@ -896,7 +896,7 @@ CACHES = {
896896 ' LOCATION' : [
897897 ' redis://1.2.3.4:6379/3' ,
898898 ],
899- ' KEY_PREFIX' : ' fangtx :api' ,
899+ ' KEY_PREFIX' : ' teamproject :api' ,
900900 ' OPTIONS' : {
901901 ' CLIENT_CLASS' : ' django_redis.client.DefaultClient' ,
902902 ' CONNECTION_POOL_KWARGS' : {
@@ -1357,17 +1357,55 @@ REST_FRAMEWORK = {
13571357```
13581358
13591359``` 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 ):
13621372 queryset = Estate.objects.all().select_related(' district' ).prefetch_related(' agents' )
1363- # 通过serializer_class指定如何序列化数据
13641373 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' )
13711409```
13721410
13731411#### 身份认证
0 commit comments