开发准备
编码规范
整体规范
控制台执行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中指定镜像源
-i http://pypi.doubanio.com/simple/
Django~=3.2
这个文件可以用setup.py安装项目,也可以共别人安装项目的所有依赖,当别人拿到这个项目,如果想在自己的虚拟环境安装,直接pip install -r requirements.txt安装依赖
拆分settings
目录结构见上个章节setting拆分,在base.py中修改失去和语言
# base.py
# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hans'
# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Shanghai'
# deploy.py
from .base import *
DEBUG = True
# 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
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