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',
]
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)