dameinliu
10/13/2019 - 7:01 AM

Django代码片段

Django代码片段

## 开始django项目
# 1. 安装pipenv
pip install pipenv
# 2. 创建项目文件夹:project,虚拟开发环境搭建
pipenv install
# 进入虚拟环境shell
pipenv shell
# 3. 安装项目依赖
pip install django -i https://mirrors.aliyun.com/pypi/simple
# 4. 创建django项目
django-admin startproject [项目地址]

## 配置django项目
# 1. project/setting.py
# 后台英文改为中文
LANGUAGE_CODE = 'zh-hans'
# 国际时区改为中国时区
TIME_ZONE = 'Asia/Shanghai'
## 创建django应用
# 1. 创建并注册应用
python manage.py startapp [APP名]

# 2. 设置应用的后台显示
# django应用文件夹/app.py
from django import AppConfig

class App名Config(AppConfig):
  name = "App名"
  verbose_name = "后台别名"

# 3. 注册应用
# [项目名]/setting.py
INSTALLED_APPS = [
  #...
  '应用名.apps.APP名Config',
]
## 创建或生成模型类
# 1. 创建模型类
# [APP名]/models.py
from django.db import models

class [模型类](models.Model):
  name = models.CharField(max_length=100)
  
# 2. 配置数据库
# [项目名]/settings.py
DATABASES = {
  
}

# 3. 迁移数据库
python manage.py makemigrations
python mangage.py migrate

# 4. 创建django后台管理员账户
python manage.py createsuperuser

# 5. 在应用admin后台注册模型类
# [APP名]/admin.py
from django.contrib import admin
from .models import [模型类一], [模型类二], [模型类三]
 
admin.site.register([模型类一])
admin.site.register([模型类二])
admin.site.register([模型类三])

# 6. 配置模型类后台
# APP名/models.py
class 模型类(models.Model):
  name = models.CharField(max_length=100)
  
  # 修改后台模型类表单,默认第一个参数为label,外键除外
  title = models.CharField('标题', max_length=70)
  author = models.ForeignKey(User, verbose_name='作者', on_delete=models.CASCADE)
 
  # 设置模型类后天显示
  class Meta:
    verbose_name = '分类'
    verbose_name_plural = verbose_name
 
  def __str__(self):
    return self.name
    
# 7. 配置模型类展示信息
# APP名/admin.py
from django.contrib import admin
from .models import Post, Category, Tag

class PostAdmin(admin.ModelAdmin):
  # 设置模型类后天列表显示
  list_display = ['title', 'created_time', 'modified_time', 'category', 'author']
  # 简化后天模型类提交表单
  fields = ['title', 'body', 'excerpt', 'category', 'tags']
  
  # 重写save_model方法,自动保存文章作者
  def save_model(self, request, obj, form, change):
    obj.author = request.user
    super().save_model(request, obj, form, change)
    
# 把新增的 Postadmin 也注册进来
admin.site.register(Post, PostAdmin)
admin.site.register(Category)
admin.site.register(Tag)

# 8. 优化其他数据保存方式,如自动添加创建时间到数据库
from django.utils import timezone
class Post(models.Model):
  # ...
  # 自动保存创建时间
  created_time = models.DateTimeField('创建时间', default=timezone.now)
  # 重写模型的save()方法,每次修改将自动保存修改时间到数据库
  def save(self, *args, **kwargs):
    self.modified_time = timezone.now()
    super().save(*args, **kwargs)