django企业开发实战-学习小结1

开发准备

编码规范

整体规范

控制台执行import this回显就是py社区推荐的整体规范

py编码规范

缩进 推荐使用四个空格做为缩进,py3不允许空格和tab混用,优先建议使用空格

import 一个import的规范,import分三部分,先后分别是系统库,三方库,自研库,每个库导入单独占一行。如果import后打算import多个模块,建议使用括号括起来。import推荐使用绝对路径,这样可读性更高。应避免使用*导入

关于魔法方法,在py文件中声明魔法方法,比如__all__, __version__等,需要放在文档注释之后,import语句之前。

django setting拆分

django-admin创建项目默认生成一个settings.py,当项目变大,配置在一个settings.py里放不下

拆分的方法:创建settings目录,目录下创建文件__init__.py, base.py, develop.py, product.py将settings.py文件中原本的内容放到base.py,然后需要独立配置的内容分别放到对应的配置文件,然后需要修改manage.py和wsgi.py,因为里面规定了配置文件的位置,将文件里的配置路径改为deploy或product

git操作

git init 初始化

git status 查看仓库状态。未添加文件时为untracked状态,添加文件但没提交为staged,提交以后为unmodified,提交后编辑文件变为modified

推送远端:先添加远程仓库git remote add origin git@repo_addr,再git push -u origin master推送master分支到远端

git add . 提交当前目录下所有修改的文件 不建议使用git add .而建议git add -p,这样可以每次添加一小块文件到暂存区,好处可以方便自己检查

git st git status的别名

git ci git commit的别名

别名可以在仓库的.git/config进行配置

git commit --amend 将新改动添加到已提交的记录

git rebase -i HEAD~3修改最近提交的3次commit, -i表示交互式操作

git blame 审查代码

案例 当web远程仓库崩溃,本地修改,如何多人协作,比如如何将你的改动让master的维护者知晓并应用:git diff personal_branch master > patch.diff将生成的diff文件给master管理者,管理者执行git apply patch.diff即可将你改的代码在管理员处更新到他的master分支

git commit 提交 不建议使用git commit -m 'xxx'而建议用git commit交互进入编辑模式提交代码,可以看到变更了哪些文件,避免提交无用文件到仓库

模型层

后面创建一个多人博客的新项目,先从model开始

创建项目与配置

创建requirements.txt,添加依赖,官方pypi比较慢,可以在requirements.txt中指定镜像源

bash 复制代码
-i http://pypi.doubanio.com/simple/

Django~=3.2

这个文件可以用setup.py安装项目,也可以共别人安装项目的所有依赖,当别人拿到这个项目,如果想在自己的虚拟环境安装,直接pip install -r requirements.txt安装依赖

拆分settings

目录结构见上个章节setting拆分,在base.py中修改失去和语言

python 复制代码
# base.py
# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hans'

# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Shanghai'
python 复制代码
# deploy.py
from .base import *

DEBUG = True
python 复制代码
# manage.py
def main():
    """Run administrative tasks."""
    # os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'typeidea.settings')
    profile = os.environ.get('TYPEIDEA_PROFILE', 'deploy')
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'typeidea.settings.%s' % profile)

编写model层代码

model层一般先设计模型,比如数据模型,可以使用UML图,或者E_R图

model设计 将model分为三类管理 分别是博客相关,配置相关和评论相关

blog

blog app是博客网站内容实体相关的app

创建app python manage.py startapp blog

python 复制代码
from django.db import models
from django.contrib.auth.models import User

# Create your models here.
class Category(models.Model):
    STATUS_NORMAL = 1
    STATUS_DELETE = 0
    STATUS_ITEMS = ((STATUS_NORMAL, '正常'), (STATUS_DELETE, '删除'))

    name = models.CharField(max_length=50, verbose_name='名称')
    status = models.PositiveIntegerField(default=STATUS_NORMAL, choices=STATUS_ITEMS, verbose_name='状态')
    is_nav = models.BooleanField(default=False, verbose_name='是否为导航')
    owner = models.ForeignKey(User, models.CASCADE, verbose_name='作者')
    created_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')

    class Meta:
        verbose_name = verbose_name_plural = '分类'

class Tag(models.Model):
    STATUS_NORMAL = 1
    STATUS_DELETE = 0
    STATUS_ITEMS = ((STATUS_NORMAL, '正常'), (STATUS_DELETE, '删除'))

    name = models.CharField(max_length=10, verbose_name='名称')
    status = models.PositiveIntegerField(default=STATUS_NORMAL, choices=STATUS_ITEMS, verbose_name='状态')
    owner = models.ForeignKey(User, models.CASCADE, verbose_name='作者')
    created_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
    
    class Meta:
        verbose_name = verbose_name_plural = '标签'
        
class Post(models.Model):
    STATUS_NORMAL = 1
    STATUS_DELETE = 0
    STATUS_DRAFT = 2
    STATUS_ITEMS = ((STATUS_NORMAL, '正常'), (STATUS_DRAFT, '删除'), (STATUS_DELETE, '草稿'))
    
    title = models.CharField(max_length=255, verbose_name='标题')
    desc = models.CharField(max_length=1024, blank=True, verbose_name='摘要')
    content = models.TextField(verbose_name='正文', help_text='正文必须为Markdown格式')
    status = models.PositiveIntegerField(default=STATUS_NORMAL, choices=STATUS_ITEMS, verbose_name='状态')
    category = models.ForeignKey(Category, models.CASCADE, verbose_name='分类')
    tag = models.ManyToManyField(Tag, verbose_name='标签')
    owner = models.ForeignKey(User, models.CASCADE, verbose_name='作者')
    created_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
    
    class Meta:
        verbose_name = verbose_name_plural = '文章'
        ordering = ['-id']

meta用来设置类的展示名称,实例排序等

conf

conf app是博客网站配置相关的app

相关推荐
西岸行者6 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意6 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码6 天前
嵌入式学习路线
学习
毛小茛6 天前
计算机系统概论——校验码
学习
babe小鑫6 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms6 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下6 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。6 天前
2026.2.25监控学习
学习
im_AMBER6 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J6 天前
从“Hello World“ 开始 C++
c语言·c++·学习