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

相关推荐
我命由我123453 分钟前
2.使用 VSCode 过程中的英语积累 - Edit 菜单(每一次重点积累 5 个单词)
前端·javascript·ide·vscode·学习·编辑器·学习方法
Pluses32 分钟前
Datawhale X 李宏毅苹果书 AI夏令营 《深度学习详解》第十九章 ChatGPT
人工智能·笔记·深度学习·学习
2401_856926932 小时前
图片转PDF技巧揭秘:四款高效工具推荐!
学习·pdf·图片转pdf·图片转pdf工具
Austim小白2 小时前
QT消息对话框学习
qt·学习
kuiini2 小时前
python学习-09【文件和目录操作】
python·学习
我要吐泡泡了哦2 小时前
GAMES104:13 引擎工具链基础-学习笔记
笔记·学习
Dovir多多3 小时前
渗透测试入门学习——php文件上传与文件包含
前端·后端·学习·安全·web安全·php
专业白嫖怪3 小时前
网络工程师学习笔记——网络互连与互联网
网络·笔记·学习·交换机·sdn可编程交换机
李小星同志3 小时前
DroidBot-GPT: GPT-powered UI Automation for Android论文学习
gpt·学习
发光的小豆芽3 小时前
TMStarget学习——T1 Segmentation数据处理及解bug
学习