当前位置: 首页 > article >正文

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中指定镜像源

-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


http://www.kler.cn/a/292997.html

相关文章:

  • [CKS] K8S NetworkPolicy Set Up
  • vue2+ element ui 集成pdfjs-dist
  • Ubuntu安装MySQL8
  • D67【python 接口自动化学习】- python基础之数据库
  • 深入理解 Vue v-model 原理与应用
  • Java学习--网络编程
  • hiprint打印/jsPDF使用/html2canvas
  • 本地使用Docker部署Nexus Maven私有仓库工具结合内网穿透实现远程管理
  • AI学习记录 - 旋转位置编码
  • python爬虫教学(四) Bs4
  • 最新版本是 FL Studio 的 24.1.1.4285 2024/08/07发布
  • 【2024数模国赛赛题思路公开】国赛C题第二套思路丨附可运行代码丨无偿自提
  • VS2022如何安装Spy+
  • ansible实战自动化运维项目
  • 优化 Webpack 打包体积的思路
  • vue3 uni app端使用uCharts
  • 华为鸿蒙系统和安卓的区别
  • java后端框架
  • 【Python机器学习】NLP词频背后的含义——反馈及改进
  • 数值分析中插值法和拟合法的对比
  • C++模板(初识)
  • 赞奇科技与华为云共襄828 B2B企业节,激活数字内容“云”创作
  • 高级java每日一道面试题-2024年9月01日-基础篇-事务的四个特性(ACID)分别是什么?
  • iOS——GCD再学习
  • Kafka-基础
  • FPGA培训-第六次培训