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

相关推荐
虾球xz7 分钟前
游戏引擎学习第20天
前端·学习·游戏引擎
LateBloomer77716 分钟前
FreeRTOS——信号量
笔记·stm32·学习·freertos
legend_jz20 分钟前
【Linux】线程控制
linux·服务器·开发语言·c++·笔记·学习·学习方法
Komorebi.py21 分钟前
【Linux】-学习笔记04
linux·笔记·学习
weiabc1 小时前
学习electron
javascript·学习·electron
HackKong2 小时前
小白怎样入门网络安全?
网络·学习·安全·web安全·网络安全·黑客
Bald Baby2 小时前
JWT的使用
java·笔记·学习·servlet
心怀梦想的咸鱼3 小时前
UE5 第一人称射击项目学习(四)
学习·ue5
AI完全体3 小时前
【AI日记】24.11.22 学习谷歌数据分析初级课程-第2/3课
学习·数据分析
Mephisto.java3 小时前
【大数据学习 | Spark-Core】Spark提交及运行流程
大数据·学习·spark