分类标签归档:Django开发

[ django部署防止后台admin出现csrf ]


有时候后台admin登陆报错scrf, 就这样部署

(base) chf@chf:~/Nginx$ cat nginx-config/default.conf

# HTTP 强制跳转 HTTPS(前端)
server {
    listen 80;
    server_name frontend.chenhaifeng.top;
    return 301 https://$host$request_uri;
}

# HTTP 强制跳转 HTTPS(后端)
server {
    listen 80;
    server_name backend.chenhaifeng.top;

< Read more >

[ django自动事务源码解析 ]


1.启动django的时候

class WSGIHandler(base.BaseHandler):
    request_class = WSGIRequest

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.load_middleware() #加载中间件

1

2.发起请求的时候

一. 应该是WSGI服务-> 他调用了application(xxx,xxx)触发了call方法

import os

from django.core.as

< Read more >

[ django翻译功能 ]


django中使用多语言翻译

.
├── django_test
│   ├── asgi.py
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   ├── views.py
│   └── wsgi.py
├── locale
│   └── zh_Hans
│       └── LC_MESSAGES
│           ├── django.mo
│           └── django.po
└── manage.py

修改4个地方

USE_I18N
LANGUAGES
LOCALE_PATHS
MIDD

< Read more >

[ django事务 ]


django的api接口事务执行顺序的解析

事务在api中的流程

遇到问题(创建了数据,使用其他线程,立马查询, 需要等api结束后才会真提交事务

解决方法: 使用on_commit注册事务提交后的回调

多线程
from django.db import transaction
transaction.on_commit(lambda: self._start_query_thread(log.id))

celery在数据库事务结束时触发任务

Django 的一个常见陷阱是立即触发任务,而不是等到 数据库事务的结束,这意味着 Celery 任务可能会运行 在所有更改都保存到数据库之前。

< Read more >

[ django文件上传 ]


文件上传使用drf序列化注意事项

假如文件字段的数据是

{
    "id": 1,
    "name": test,
    "file": /media/xxxxxxx/test.txt
})

序列化器要添加context={"request": request}返回的字段信息才是 (后端域名 + 文件路径)

ser = StockItemImpWorkSerializer(instance, context={"request": request})

上下文

###########
## seri

< Read more >

[ django下载文件浏览器显示进度条 ]


django使用流响应文件, 浏览器会有下载进度条, 可以点击进行暂停, 继续

后端

    @action(detail=False, methods=['get'], schema=AutoDocSchema())
    def get_big_files(self, request):
        def file_iterator(file_path, start_byte=0, chunk_size=256):
            with open(file_path, 'rb') as f:
                f.seek(

< Read more >

[ django中使用mongodb,mongoengine ]


官方文档(http://docs.mongoengine.org/guide/querying.html)

安装模块

pip install mongoengine

可以完全替代django中的原本的mongodb

from mongoengine import Document, StringField, BooleanField, DateTimeField, DictField, connect
from datetime import datetime

connect(
    db="eform",
    username="debug"

< Read more >

[ celery指定时间执行 ]


django中的celery任务指定时间执行

我这里是发送邮件, 定时晚上6点执行

from datetime import datetime, timedelta
from django.conf import settings
from django.utils import timezone
from backend.cews.tasks import send_email_when_check_eform
import pytz

def schedule_email(recipient_email, subject, message):
    """

< Read more >