Django项目--小知识、小技巧--持续更新

一、Django流程

1、具体过程

2、创建Django项目、应用、admin站点管理员用户

django-admin startproject 项目名
python manage.py startapp 应用名
python manage.py createsuperuser

3、如果创建的应用使用了models.py就需要在settings文件中的INSTALLED_APPS 中注册

4、还需要在总urls中的urlpatterns加入

path('', include('应用名.urls'))  
path('', include('users.urls'))

二、Django项目Views

1、在HttpResponse中可以设置cookie

HttpResponse.set_cookie(cookie名, value=cookie值, max_age=cookie有效期)

2、cookie的读取

cookie1 = request.COOKIES.get('bailu1')

3、获取发起请求的对象

4、通过models中的模型类查询数据

这个filter中有许多种查询方法举出个例展示

list=BookInfo.objects.filter(id__exact=1)
list=BookInfo.objects.all()  #查询所有

5、常用的视图方法

1、APIView :基类

GenericAPIView(继承APIView ):增加操作序列化器和数据库查询的方法,为Mixin拓展类执行提供方法支持。

serializer_class :指明视图使用的序列化器 

queryset :指明使用的数据查询集

get_object(self) :获取视图类对象

2、Mixin类:可配合GenericAPIView使用

ListModelMixin :列表视图扩展类,提供list(request, *args, **kwargs)方法快速实现列表视图,返回200状态码。

CreateModelMixin:创建视图扩展类,提供create(request, *args, **kwargs)方法快速实现创建资源的视图,成功返回201状态码。

RetrieveModelMixin:详情视图扩展类,提供retrieve(request, *args, **kwargs)方法,可以快速实现返回一个存在的数据对象。

UpdateModelMixin:更新视图扩展类,提供update(request, *args, **kwargs)方法,可以快速实现更新一个存在的数据对象。

DestroyModelMixin:删除视图扩展类,提供destroy(request, *args, **kwargs)方法,可以快速实现删除一个存在的数据对象。

3、GenericAPIView的拓展,可直接使用

CreateAPIView:提供post 方法,继承自:GenericAPIView、CreateModelMixin

ListAPIView:提供get 方法,继承自:GenericAPIView、ListModelMixin

RetrieveAPIView:提供get 方法,继承自: GenericAPIView、RetrieveModelMixin

DestoryAPIView:提供delete 方法,继承自:GenericAPIView、DestoryModelMixin

UpdateAPIView:提供put 和patch 方法,继承自:GenericAPIView、UpdateModelMixin

RetrieveUpdateAPIView:提供get、put、patch方法,继承自: GenericAPIView、RetrieveModelMixin、UpdateModelMixin

RetrieveUpdateDestoryAPIView:提供get、put、patch、delete方法,继承自:GenericAPIView、RetrieveModelMixin、UpdateModelMixin、DestoryModelMixin

4、viewset视图

ViewSet:继承自APIView与ViewSetMixin,作用也与APIView:基本类似,提供了身份认证、权限校验、流量管理等。

在ViewSet中,没有提供任何动作action方法,需要我们自己实现action方法。

GenericViewSet:继承自GenericAPIView与ViewSetMixin,在实现了调用as_view()时传入字典(如{'get':'list'})的映射处理工作的同时,还提供了GenericAPIView提供的基础方法,可以直接搭配Mixin扩展类使用。

ModelViewSet:继承自GenericViewSet,同时包括了ListModelMixin、RetrieveModelMixin、CreateModelMixin、UpdateModelMixin、DestoryModelMixin。

ReadOnlyModelViewSet:继承自GenericViewSet,同时包括了ListModelMixin、RetrieveModelMixin。

action属性:在视图集中,我们可以通过action对象属性来获取当前请求视图集时的action动作是哪个。

action属性的使用可实现同一种请求方法,多种处理视图。:例

from rest_framework import mixins
from rest_framework.viewsets import GenericViewSet
from rest_framework.decorators import action

class BookInfoViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin, GenericViewSet):
    queryset = BookInfo.objects.all()
    serializer_class = BookInfoSerializer

    # detail为False 表示路径名格式应该为 books/latest/
    @action(methods=['get'], detail=False)
    def latest(self, request):
        """
        返回最新的图书信息
        """
        ...

    # detail为True,表示路径名格式应该为 books/{pk}/read/
    @action(methods=['put'], detail=True)
    def read(self, request, pk):
        """
        修改图书的阅读量数据
        """
        ...

三、Django项目urls

1、re_path可以提取urls中的数据传入views中

2、如果是Viewset视图,在添加urls是可直接

例如:

from rest_framework import routers
urlpatterns = [
    ...
]
router = routers.DefaultRouter()
router.register('addresses', views.AddressViewSet, basename='addresses')

urlpatterns += router.urls

四、Django项目models

1、在模型中字段常用的属性

max_length(最大长度)、min_length(最小长度)、null(是否可以为空)、default(默认值)、unique(是否唯一)、primary_key(是否为主键)

2、class Meta类

 class Meta:
      db_table='bookinfo' #指定BookInfo生成的数据表名为bookinfo
      fields = '__all__'   #选取序列化的字段
      fields = ('id', 'btitle', 'bpub_date')  #指定某些字段
      exclude = ('image',)     #排除某些字段
      read_only_fields = ('id', 'bread', 'bcomment')  #设置只读字段
      extra_kwargs = {  #设置字段的约束
            'bread': {'min_value': 0, 'required': True},
            'bcomment': {'min_value': 0, 'required': True},
        }
      verbose_name = '商品频道'  #定义模型的名字
      verbose_name_plural = verbose_name  # 返回类的名字

五、Django项目admin

六、Django项目serializers(自己创建)

1、序列化器中校验字段常用的属性

label(别名)、read_only(只用于序列化输出使用)、write_only(只用于但序列化输入时使用)、max_length(最大长度)、min_length(最短长度)、verbose_name(别名)、required(反序列化必须输出)、many(为True表示关联对象不止一个)

七、Django项目settings

1、MySQL数据库的配置

安装命令

pip install mysqlclient
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'test2', #数据库名字,
        'USER': 'root', #数据库登录用户名
        'PASSWORD': 'mysql', #数据库登录密码
        'HOST': 'localhost', #数据库所在主机
        'PORT': '3306', #数据库端口
    }
}

2、DRF配置

EXCEPTION_HANDLER异常处理需要再总应用下创建文件utils,在创建exceptions.py,创建函数exception_handler(相当于对整个项目try)
# DRF配置
REST_FRAMEWORK = {
    # 异常处理
    'EXCEPTION_HANDLER': '项目名.utils.exceptions.exception_handler',
    # 配置全局的认证方式
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication',  # JWT认证
        'rest_framework.authentication.SessionAuthentication',  # 基本认证
        'rest_framework.authentication.BasicAuthentication',  # session认证
    ),
    # 全局分类
    'DEFAULT_PAGINATION_CLASS': '项目名.utils.pagination.StandardResultsSetPagination',
}

3、Redis配置

Redis 官方文档

Redis 参考命令

安装Redis包命令

pip install redis
pip install django-redis
#Redis配置
CACHES = {
    "default": { # 默认
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/0",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    },
    "session": { # session
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    },
}
SESSION_ENGINE = "django.contrib.sessions.backends.cache"# 设置存储到内存,但是使用"SESSION_CACHE_ALIAS"就被存储到Redis
SESSION_CACHE_ALIAS = "session"  # 告诉session redis的别名

4、配置工程日志

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,  # 是否禁用已经存在的日志器
    'formatters': {  # 日志信息显示的格式
        'verbose': {
            'format': '%(levelname)s %(asctime)s %(module)s %(lineno)d %(message)s'
        },
        'simple': {
            'format': '%(levelname)s %(module)s %(lineno)d %(message)s'
        },
    },
    'filters': {  # 对日志进行过滤
        'require_debug_true': {  # django在debug模式下才输出日志
            '()': 'django.utils.log.RequireDebugTrue',
        },
    },
    'handlers': {  # 日志处理方法
        'console': {  # 向终端中输出日志
            'level': 'INFO',
            'filters': ['require_debug_true'],
            'class': 'logging.StreamHandler',
            'formatter': 'simple'
        },
        'file': {  # 向文件中输出日志
            'level': 'INFO',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': os.path.join(os.path.dirname(BASE_DIR), "logs/rongqian.log"),  # 日志文件的位置
            'maxBytes': 300 * 1024 * 1024,
            'backupCount': 10,
            'formatter': 'verbose'
        },
    },
    'loggers': {  # 日志器
        'django': {  # 定义了一个名为django的日志器
            'handlers': ['console', 'file'],  # 可以同时向终端与文件中输出日志
            'propagate': True,  # 是否继续传递日志信息
            'level': 'INFO',  # 日志器接收的最低日志级别
        },
    }
}

5、自定义存储位置

# fastDFS
FDFS_BASE_URL = 'http://192.168.161.130:8888/'
FDFS_CLIENT_CONF = os.path.join(BASE_DIR, 'utils/fastdfs/client.conf')
# django文件存储
DEFAULT_FILE_STORAGE = 'rongqian_site.utils.fastdfs.fdfs_storage.FastDFSStorage'

6、加入CKEditor富文本编辑框

1、先安装

pip install django-ckeditor==6.1.0

2、在配置中加入

# 富文本编辑器ckeditor配置
CKEDITOR_CONFIGS = {
    'default': {
        'toolbar': 'full',  # 工具条功能
        'height': 300,  # 编辑器高度
        # 'width': 300,  # 编辑器宽
    },
}
CKEDITOR_UPLOAD_PATH = ''  # 上传图片保存路径,使用了FastDFS,所以此处设为''

7、实现搜索功能

开源的 Elasticsearch 是目前全文搜索引擎的首选。

它可以快速地储存、搜索和分析海量数据。维基百科、Stack Overflow、Github 都采用它。

Elasticsearch 的底层是开源库 Lucene。但是,你没法直接用 Lucene,必须自己写代码去调用它的接口。Elastic 是 Lucene 的封装,提供了 REST API 的操作接口,开箱即用。

Elasticsearch 是用Java实现的。

Elasticsearch 不支持对中文进行分词建立索引,需要配合扩展elasticsearch-analysis-ik来实现中文分词处理。

1、安装

pip install drf-haystack
pip install elasticsearch==2.4.1

2.配置

# Haystack
HAYSTACK_CONNECTIONS = {
    'default': {
        'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
        'URL': 'http://192.168.225.128:9200/',  # 此处为elasticsearch运行的服务器ip地址,端口号固定为9200
        'INDEX_NAME': 'rongqian',  # 指定elasticsearch建立的索引库的名称
    },
}

# 当添加、修改、删除数据时,自动生成索引
HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'

3、在templates目录中创建text字段使用的模板文件,定义搜索范围

{{ object.name }}
{{ object.caption }}
{{ object.id }}

八、Django REST framework设计风格

1、后端常用APi接口设计

请求方法请求地址后端操作
GET/goods获取所有商品
POST/goods增加商品
GET/goods/1获取编号为1的商品
PUT/goods/1修改编号为1的商品
DELETE/goods/1删除编号为1的商品
  • 30
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值