Django python后端开发

简介

持续更新中。。。。

一、安装Django环境

1、首先确保python已安装。
2、安装Django: 打开命令行,输入以下命令来安装Django:

pip install django

3、验证安装: 安装完成后,你可以在命令行中输入以下命令来验证Django是否成功安装:

django-admin --version

二、创建Django项目

django-admin startproject myproject

这将创建一个名为myproject的文件夹,创建的文件夹在cmd当前运行的目录下,其中包含Django项目的基本结构。

三、运行项目

终端命令进入项目文件夹,或在开发软件如VS CODE中启动

cd myproject
python manage.py runserver

四、创建应用程序

在Django中,应用程序是项目的组成部分,它负责处理特定功能。

python manage.py startapp myapp

五、数据库配置

Django3.0以上原生支持mysql8.0 ,一般我们的项目都是5.7,下面介绍对5.7数据库配置支持,配置后数据库操作尽量使用python的原生方法,不要使用Django自带的方法,避免不支持造成错误。

1、安装驱动两个驱动择一:

如果选择使用 mysqlclient:

pip install mysqlclient

如果选择使用 mysql-connector-python:

pip install mysql-connector-python

2、配置setting.py

原生配置;

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'your_database_name',
        'USER': 'your_database_user',
        'PASSWORD': 'your_database_password',
        'HOST': 'localhost',  # 默认为 localhost,如果 MySQL 服务器在本地,否则为服务器地址
        'PORT': '3306',  # MySQL 默认端口
    }
}

使用connector:
虽然这种方法可以让 Django 3 与 MySQL 5.7 兼容,但某些高级功能可能不支持或需要特殊处理。

DATABASES = {
    'default': {
        'ENGINE': 'mysql.connector.django',
        'NAME': 'your_db_name',
        'USER': 'your_db_user',
        'PASSWORD': 'your_db_password',
        'HOST': 'your_db_host',
        'PORT': '3306',
    }
}

六、Django内置安全机制

Django内置CSRF tpken机制,当使用POST请求时会检测前端传递过来的token,一般测试环境我们可以通过设置
引入 from django.views.decorators.csrf import csrf_exempt 函数前设置 @csrf_exempt 来跳过检测

from django.views.decorators.csrf import csrf_exempt
@csrf_exempt

举例
在这里插入图片描述

七、雪花算法实现

Django雪花算法封装 看这里python雪花算法

八、日志记录

Django内置日志文件管理。

1、配置文件引入模块

import logging.config
import os
# 定义日志配置

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
    #这里配置了两个文件用来保存日志  INFO  与  error
        'file': {
            'level': 'INFO',
            'class': 'logging.FileHandler',
            'filename': os.path.join(BASE_DIR, 'django.log'),
        },
        'file_error': {
            'level': 'ERROR',
            'class': 'logging.FileHandler',
            'filename': os.path.join(BASE_DIR, 'error.log'),
            'formatter': 'verbose',
        },
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'verbose'
        },
    },
    'formatters': {
        'verbose': {
            'format': '{levelname} {asctime} {module} {message}',
            'style': '{',
        },
    },
    'loggers': {
        'django': {
            'handlers': ['file', 'console','file_error'],
            'level': 'INFO',
            'propagate': True,
        },
    },
}

# 应用日志配置
logging.config.dictConfig(LOGGING)

2、日志使用

import logging
logger = logging.getLogger('django')

def index(request):
	 logger.error('错误日志!')
	 logger.info('正常日志!')

九、多数据库配置

多数据库配置,正式项目一般不知一个数据库让我们连接 比如应用库 与 业务库分开,用户登录查询应用库,业务数据查询业务库,这就需要配置不通的数据库链接
下边内容针对不同数据库进行配置

1、配置setting.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'your_database_name',
        'USER': 'your_database_user',
        'PASSWORD': 'your_database_password',
        'HOST': 'localhost',  # 默认为 localhost,如果 MySQL 服务器在本地,否则为服务器地址
        'PORT': '3306',  # MySQL 默认端口
    },
    'second_db': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'your_second_db_name',
        'USER': 'your_second_db_user',
        'PASSWORD': 'your_second_db_password',
        'HOST': 'localhost',  # 默认为 localhost,如果 MySQL 服务器在本地,否则为服务器地址
        'PORT': '3306',  # MySQL 默认端口
    }
}

2、新创建用于连接mysql的封装应用

python manage.py startapp database_utils

3、在 Django 项目的 INSTALLED_APPS 列表中添加 database_utils 应用:

INSTALLED_APPS = [
    # 其他已安装的应用
    'database_utils',
]

4、在你的 database_utils 应用中创建一个实用程序文件 utils.py,其中包含用于连接和查询多个数据库的函数:

# database_utils/utils.py

import mysql.connector
from mysql.connector import errorcode
from django.conf import settings

def get_mysql_connection(database='default'):
    """获取指定数据库的 MySQL 连接"""
    try:
        db_settings = settings.DATABASES[database]
        connection = mysql.connector.connect(
            user=db_settings['USER'],
            password=db_settings['PASSWORD'],
            host=db_settings['HOST'],
            database=db_settings['NAME']
        )
        return connection
    except mysql.connector.Error as err:
        if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
            print(f"{database}: 用户名或密码错误")
        elif err.errno == errorcode.ER_BAD_DB_ERROR:
            print(f"{database}: 数据库不存在")
        else:
            print(f"{database}: 其他错误: {err}")
        return None

def execute_query(sql, database='default'):
    """在指定的数据库中执行 SQL 查询并返回结果"""
    connection = get_mysql_connection(database)
    if connection is None:
        return None

    try:
        cursor = connection.cursor()
        cursor.execute(sql)
        rows = cursor.fetchall()
        columns = [col[0] for col in cursor.description]  # 获取列名
        datas = [dict(zip(columns, row)) for row in rows]
        return datas

    except mysql.connector.Error as err:
        print(f"{database}: 执行查询时出错: {err}")
        return None

    finally:
        cursor.close()
        connection.close()

5、在其它应用中使用

from database_utils.utils import execute_query
from django.http import JsonResponse
def index(request):
    sql_default = "SELECT * FROM your_default_table"  # 替换为你的实际 SQL 查询
    sq_second_db= "SELECT * FROM your_secondary_table"  # 替换为你的实际 SQL 查询
    
    default_data = execute_query(sql_default, database='default')
    secondary_data = execute_query(sql_secondary, database='secondary')

    context = {
        'default_data': default_data,
        'secondary_data': secondary_data
    }
    return JsonResponse(request, 'main_app_template.html', context)

十、数据库异常捕获优化

1、在配置默认数据后,如果数据库配置信息错误 或者 数据库失联,会造成这样的错误 非常不友好,开发环境无所谓。

在这里插入图片描述
在这里插入图片描述

2、在项目主目录 有 settings.py 的目录,创建 middleware.py

在这里插入图片描述

内容代码

# sbh_bly_api/middleware.py

import logging
from django.http import JsonResponse

logger = logging.getLogger(__name__)

class CustomExceptionMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        try:
            response = self.get_response(request)
            return response
        except Exception as e:
           
            code = '40'
            message = '服务器内部错误!'
            return_data =  {'code': code, 'message': message, 'data': []}
            logger.error(return_data)
            return JsonResponse(return_data, status=500)

    def process_exception(self, request, exception):
        code = '40'
        message = '服务器内部错误!'
        return_data =  {'code': code, 'message': message, 'data': []}
        logger.error(return_data)
        return JsonResponse(return_data, status=500)

在 settings.py 引入中间件
‘项目名称.middleware.CustomExceptionMiddleware’,

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    '项目名称.middleware.CustomExceptionMiddleware',
]
  • 18
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贪玩的小金魚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值