Django初窥门径-项目初始化

环境准备

切换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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/118684.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

机组 硬件

典型的冯诺伊曼计算机是以运算器为中心 现代的计算机已转化为以存储器为中心 运算器:完成算术运算和逻辑运算,并将运算的中间结果暂存在运算器内存储器:存放数据和程序控制器:控制、指挥程序和数据的输入、运行以及处理运算结果输…

react-app-env.d.ts是什么?

react-app-env.d.ts这个文件是使用CRA脚手架生成react项目时自动生成的,在平时的开发过程中看到这个文件就会感觉很疑惑,出于好奇心,在网上查找资料,得出下文 前置知识 这个是一个类型声明文件 它的内容很短,就一行…

成集云 | 电商平台、ERP、WMS集成 | 解决方案

电商平台ERPWMS 方案介绍 电商平台即是一个为企业或个人提供网上交易洽谈的平台。企业电子商务平台是建立在Internet网上进行商务活动的虚拟网络空间和保障商务顺利运营的管理环境;是协调、整合信息流、货物流、资金流有序、关联、高效流动的重要场所。企业、商家…

线性表(顺序表,单链表,双链表,循环链表,静态链表)

目录 1.线性表的定义1.几个重要的概念2.逻辑结构 2.线性表的基本操作3.顺序表(线性表的顺序存储)1.静态分配2.动态分配3.顺序表的特点4.顺序表的基本操作1.插入2.删除3.查找1.按位查找2.按值查找 4.链表(线性表的链式存储)1.单链表…

项目文章 | 总石油烃-重金属污染与土壤微生态系统:细菌多样性、组装和生态功能研究

大家好,这里是专注表观组学十余年,领跑多组许科研服务的易基因。 2023年9月30日,中南大学张杜博士为第一作者、李骞教授为通讯作者在《Chemosphere》杂志上发表题为“Effects of single and combined contamination of total petroleum hydr…

Single Image Haze Removal Using Dark Channel Prior(暗通道先验)

去雾算法都会依赖于很强的先验以及假设,并结合相应的物理模型,完成去雾过程。本文作者何凯明及其团队通过大量的无雾图像和有雾图像,归纳总结出无雾图像在其对应的暗通道图像上具有极低的强度值(趋近于0),并…

HDD最后的冲刺:大容量硬盘的奋力一搏

1.引言 在上一篇文章(微软Azure云数据中心工作负载分享:SSD与HDD,何去何从?)中,我们提到在应对SSD QLC/PLC大容量的挑战中,HDD也是在不断的努力,推出HAMR,SMR等新介质。…

【验证码系列】Google验证码从数据训练到机器自动识别算法构建

文章目录 1. 写在前面2. CSCI级设计决策2.1. Google验证码突防关联2.2. Google验证码突防行为设计决策 3. Google验证码突防体系结构设计3.1. Google验证码突防部件3.1.2. Google验证码突防组成 3.2. Google验证码突防软件3.2.1. Google验证码突防软件体系结构3.2.2. Google验证…

信道编码译码及MATLAB仿真

文章目录 前言一、什么是信道编码?二、信道编码的基本逻辑—冗余数据1、奇偶检验码2、重复码 三、编码率四、4G 和 5G 的信道编码1、卷积码2、维特比译码(Viterbi)—— 概率译码3、LTE 的咬尾卷积码4、LTE 的 turbo 码 五、MATLAB 仿真1、plo…

Amazon Fargate使用Seekable OCI 实现更快的容器启动速度

前言 虽然在部署和扩展应用程序时,使用容器进行开发的方式已日趋流行,但仍有一些领域可以改进。扩展容器化应用程序的主要问题之一是启动时间长,尤其是在纵向扩展期间,需要添加较新的实例。此问题可能会对客户体验(例如…

EfficientDet论文讲解

目录 EfficientDet 0、摘要 1、整体架构 1.1 BackBone:EfficientNet-B0 1.2 Neck:BiFPN特征加强提取网络 1.3 Head检测头 1.4 compound scaling 2、anchors先验框 3、loss组成 4、论文理解 5、参考资料 EfficientDet 影响网络的性能(或者说规…

Android Gldie复用只取之前decode过的缓存resource,Kotlin

Android Gldie复用只取之前decode过的缓存resource,Kotlin import android.graphics.Bitmap import android.os.Bundle import android.util.Log import android.widget.ImageView import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.life…

【Linux】服务器与磁盘补充知识,硬raid操作指南

服务器硬件 cpu 主板 内存 硬盘 网卡 电源 raid卡 风扇 远程管理卡 1.硬盘尺寸: 目前生产环境中主流的两种类型硬盘 3.5寸 和2.5寸硬盘 2.5寸硬盘可以通过使用硬盘托架后适用于3.5寸硬盘的服务器 但是3.5寸没法转换成2.5寸 2.如何在服务器上制作raid 华为服务器为例子做…

基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(一)

熟悉项目环境 1. 苍穹外卖项目介绍1.1 项目介绍1.2 技术选型 2. 开发环境搭建2.1 前端环境2.2 后端环境搭建2.3 Git版本控制2.4 nginx反向代理和负载均衡 3.登录功能4. Swagger4.1 介绍4.2 使用步骤4.3 常用注解 1. 苍穹外卖项目介绍 1.1 项目介绍 苍穹外卖是专门为餐饮企业&…

JAVA前端开发介绍

以一个网站为例包括网站设计、前端开发、程序开发等。网站设计就是网站的外观,平面的东西。程序开发也好理解就是功能实现。而前端开发,简单来说,就是把平面效果图转换成网页,把静态转换成动态。它的工作包括了:切图、写样式、做鼠…

rust闭包

rust闭包 参考 Rust有三个闭包trait:Fn、FnMut和FnOnce,编译器会根据闭包内代码的行为自动为闭包实现这些trait。 上面这段话超级重要!!! 对于不可变或移动捕获变量的闭包,编译器会实现Fn trait&#xff0…

三维模型几何坐标精度偏差应采用主要措施

三维模型几何坐标精度偏差应采用主要措施 降低倾斜摄影三维模型几何精度偏差是提高模型质量和准确性的关键任务。下面将浅谈降低倾斜摄影三维模型几何精度偏差应采用的主要措施。 1、倾斜角度选择:倾斜角度对于几何精度具有重要影响。选择适当的倾斜角度可以优化视…

项目管理之如何监控项目健康状态

项目管理是一个复杂且关键的过程,涉及到多个关键因素,包括项目名称、项目管理委员会成员、项目经理、项目生命周期的各个阶段以及资源泳道等。如何有效地监控项目的健康状态是确保项目成功的重要环节。本文将详细介绍项目管理全景图及其在风险识别中的应…

JAVA二叉搜索树(专门用来查找)

目录 二叉搜索树又叫二叉排序树,它具有以下特征 二次搜索树的效率 模拟最简二叉搜索树代码 代码片段分析 查找二叉搜索树数据: 如果我们用递归的方法查找数据有什么不一样? 插入数据 删除数据(难点) 二叉搜索树又叫二叉排序树,它具有以下特征…

C++ day3作业

1> 思维导图 2> 自己封装一个矩形类(Rect),拥有私有属性:宽度(width)、高度(height), 定义公有成员函数: 初始化函数:void init(int w, int h) 更改宽度的函数:set_w(int w) 更改高度的函数:set_h(int h) 输出该矩形的周长和面积函数:void s…