环境准备
切换pypi
源
运行下面的脚本将pypi
源切换为阿里云镜像,避免安装python库的过程中出现网络问题
#!/bin/bash
# 定义配置内容
config_content="[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
"
# 获取用户主目录
user_home="$HOME"
# 确保.pip目录存在
pip_dir="$user_home/.pip"
if [ ! -d "$pip_dir" ]; then
mkdir -p "$pip_dir"
fi
# 设置pip配置文件的路径
pip_conf_path="$pip_dir/pip.conf"
# 写入配置内容到pip.conf文件
echo -e "$config_content" > "$pip_conf_path"
echo "配置已写入到 $pip_conf_path 文件中。"
新建Django
项目
使用PyCharm创建项目
目录结构
myproject/ # 项目根目录
├── myproject/ # 项目配置目录
│ ├── __init__.py # 空文件,标识目录为 Python 包
│ ├── settings.py # 项目设置,包括数据库配置、应用配置等
│ ├── urls.py # URL 路由规则的定义
│ ├── wsgi.py # 用于部署项目到 WSGI 服务器的入口文件
│ ├── asgi.py # 用于部署项目到 ASGI 服务器的入口文件
├── myapp/ # 应用程序目录
│ ├── __init__.py # 空文件,标识目录为 Python 包
│ ├── admin.py # 配置应用程序的后台管理界面
│ ├── apps.py # 应用程序的配置
│ ├── migrations/ # 存放数据库迁移文件
│ ├── models.py # 定义应用程序的数据模型
│ ├── tests.py # 单元测试文件
│ ├── views.py # 包含处理 HTTP 请求的视图函数
│ ├── static/ # 存放应用程序的静态文件
│ │ ├── myapp/ # 应用程序的静态文件目录
│ │ │ ├── my_css.css # 应用程序的 CSS 文件
│ │ │ ├── my_js.js # 应用程序的 JavaScript 文件
│ ├── templates/ # 存放应用程序的 HTML 模板文件
│ │ ├── myapp/ # 应用程序的模板文件目录
│ │ │ ├── template.html # 应用程序的 HTML 模板
├── manage.py # 项目管理脚本,用于执行各种管理任务
├── static/ # 项目静态文件目录
│ ├── my_global_static.css # 全局的 CSS 文件
├── templates/ # 项目模板文件目录
│ ├── base.html # 项目的基本 HTML 模板
│ ├── index.html # 项目的首页 HTML 模板
├── media/ # 媒体文件目录,存放用户上传的媒体文件
启动项目
设置语言和时区
修改CodeVoyager/settings.py
# 设置项目的默认语言代码为简体中文
LANGUAGE_CODE = 'zh-hans'
# 设置项目的时区为亚洲/上海
TIME_ZONE = 'Asia/Shanghai'
# 启用国际化(Internationalization)
# 当为 True 时,允许项目支持多种语言和翻译
USE_I18N = True
# 启用本地化(Localization)
# 当为 True 时,项目将本地化日期、时间等内容为特定地区的格式
USE_L10N = True
# 启用时区支持
# 当为 True 时,项目将处理日期和时间的时区信息
USE_TZ = True
连接mysql
创建数据库
CREATE USER 'code_voyager'@'%' IDENTIFIED BY "code_voyager";
CREATE DATABASE code_voyager DEFAULT CHARACTER SET utf8;
GRANT ALL PRIVILEGES ON code_voyager.* TO code_voyager@'%';
FLUSH PRIVILEGES;
安装mysqlclient
Windows
pip install mysqlclient
macOS (Homebrew)
brew install mysql-client pkg-config
export PKG_CONFIG_PATH="/opt/homebrew/opt/mysql-client/lib/pkgconfig"
pip install mysqlclient
Linux
sudo apt-get install python3-dev default-libmysqlclient-dev build-essential # Debian / Ubuntu
sudo yum install python3-devel mysql-devel # Red Hat / CentOS
pip install mysqlclient
修改配置文件
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'code_voyager',
'USER': 'code_voyager',
'PASSWORD': 'code_voyager',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
连接Redis
安装依赖
pip install django-redis
修改配置
CACHES = {
'default': {
'BACKEND': 'django_redis.cache.RedisCache',
'LOCATION': 'redis://{url}:{port}/1'.format(
url='127.0.0.1',
port='6379'
),
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
},
},
}
创建管理员用户
生成数据库表
python manage.py makemigrations
python manage.py migrate
新建管理员用户
python manage.py createsuperuser
登录管理员账号
使用djangorestframework
实现rest API
安装djangorestframework
pip install markdown django-filter djangorestframework
新增分页配置CodeVoyager/pagination.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
from rest_framework.pagination import PageNumberPagination
class Pagination(PageNumberPagination):
page_size_query_param = 'page_size'
page_query_param = 'page'
自定义权限CodeVoyager/permissions.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
from rest_framework.permissions import BasePermission
class IsAdminUser(BasePermission):
"""只允许管理员用户访问"""
def has_permission(self, request, view):
user = request.user
return bool(user and user.is_active and user.is_superuser)
class IsAuthenticated(BasePermission):
"""允许登录用户访问"""
def has_permission(self, request, view):
user = request.user
return bool(user and user.is_active and user.is_authenticated)
class AllowAny(BasePermission):
"""允许任何人访问"""
def has_permission(self, request, view):
return True
修改配置
INSTALLED_APPS = [
...
'rest_framework',
]
# Settings for REST framework are all namespaced in the REST_FRAMEWORK setting.
# https://www.django-rest-framework.org/api-guide/settings/
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'CodeVoyager.permissions.IsAdminUser',
),
'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.URLPathVersioning',
'DEFAULT_VERSION': 'v1',
'ALLOWED_VERSIONS': ['v1'],
'DEFAULT_PAGINATION_CLASS': 'CodeVoyager.pagination.Pagination',
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.SessionAuthentication',
),
'DEFAULT_FILTER_BACKENDS': (
'django_filters.rest_framework.DjangoFilterBackend',
),
}
集成swagger
安装依赖
pip install drf-yasg2
修改配置
INSTALLED_APPS = [
...
'rest_framework',
'drf_yasg2',
...
]
配置url
"""
URL configuration for CodeVoyager project.
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/4.2/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path, include
from drf_yasg2 import openapi
from drf_yasg2.views import get_schema_view
from CodeVoyager import permissions
schema_view = get_schema_view(
openapi.Info(
title='全栈探索者',
default_version='v1',
description='全栈探索者接口文档',
),
public=True,
permission_classes=(permissions.AllowAny,),
)
urlpatterns = [
path('swagger-ui/', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
# path('api-auth/', include('rest_framework.urls')),
path('admin/', admin.site.urls),
]
测试是否正常
固定版本
pip freeze > requirements.txt
如果在使用的过程中由于python库之间的版本问题导致报错,请使用一下依赖:
asgiref==3.7.2
async-timeout==4.0.3
certifi==2023.7.22
charset-normalizer==3.3.2
coreapi==2.3.3
coreschema==0.0.4
Django==4.1.4
django-cors-headers==4.3.0
django-filter==23.3
django-redis==5.4.0
djangorestframework==3.13.1
drf-yasg2==1.19.4
idna==3.4
importlib-metadata==6.8.0
inflection==0.5.1
itypes==1.2.0
Jinja2==3.1.2
Markdown==3.5.1
MarkupSafe==2.1.3
mysqlclient==2.2.0
packaging==23.2
pytz==2023.3.post1
redis==5.0.1
requests==2.31.0
ruamel.yaml==0.18.5
ruamel.yaml.clib==0.2.8
six==1.16.0
sqlparse==0.4.4
typing_extensions==4.8.0
uritemplate==4.1.1
urllib3==2.0.7
zipp==3.17.0
pip install -Ur requirements.txt