跟着老齐学django笔记

建立项目

django-admin startproject mysite
django-admin startapp blog
建立项目后,根据习惯做一些设置
建立三个文件夹 apps ,statics,tempaltes用来存放自己的应用和模板以及静态文件,目录结构如下
也是打算好好认真读一下这本书,顺便做些笔记,也看下官方的案例,打打基础,目录结构如下

mysite
    ├── apps
    │   ├── blog
    │   │   ├── admin.py
    │   │   ├── apps.py
    │   │   ├── __init__.py
    │   │   ├── migrations
    │   │   │   ├── 0001_initial.py
    │   │   │   ├── __init__.py
    │   │   │   └── __pycache__
    │   │   │       ├── 0001_initial.cpython-39.pyc
    │   │   │       └── __init__.cpython-39.pyc
    │   │   ├── models.py
    │   │   ├── __pycache__
    │   │   │   ├── admin.cpython-39.pyc
    │   │   │   ├── __init__.cpython-39.pyc
    │   │   │   └── models.cpython-39.pyc
    │   │   ├── tests.py
    │   │   └── views.py
    │   └── polls
    │       ├── admin.py
    │       ├── apps.py
    │       ├── __init__.py
    │       ├── migrations
    │       │   └── __init__.py
    │       ├── models.py
    │       ├── tests.py
    │       └── views.py
    ├── asgi.py
    ├── db.sqlite3
    ├── __init__.py
    ├── __pycache__
    │   ├── __init__.cpython-39.pyc
    │   ├── settings.cpython-39.pyc
    │   └── urls.cpython-39.pyc
    ├── settings
    │   ├── dev.py
    │   └── __pycache__
    │       └── dev.cpython-39.pyc
    ├── statics
    ├── templates
    ├── urls.py
    └── wsgi.py

然后来说下settings里的配置,这里吧settings给放到一个目录下面了,源文件改名为dev.py,为了区分开发模式和产品模式
来说下settings里的一些配置

import os,sys

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
PROJECT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# 追加导包路径
sys.path.insert(0, os.path.join(PROJECT_DIR, 'apps'))

这里修改了BASE_DIR,因为移动了settings的目录,然后追加了PROJECT_DIR项目目录,和apps的导入目录

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    #自己的app
    'blog',
]

注册自己的app,可以手动吧刚才的blog移动到apps的目录下,也可以自己进入到那个目录下进行创建

LANGUAGE_CODE = 'zh-hans'

TIME_ZONE = 'Asia/Shanghai'

USE_I18N = True

USE_L10N = True

USE_TZ = False

这里配置下语言和时区
接下来配置下静态文件的目录

STATICFILES_DIRS = [
    os.path.join(PROJECT_DIR, 'statics'),
]
STATIC_ROOT = os.path.join(PROJECT_DIR, 'collect_static')
STATIC_URL = '/statics/'

MEDIA_ROOT = os.path.join(PROJECT_DIR, 'media')
MEDIA_URL = '/img/'

有强迫症吧,每次都是这样该配置,不想目录看起来太乱。接下来就可以跟着书本练习了

进入blog的models.py文件 建立blog的数据模型

from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User

# Create your models here.

class BlogArticles(models.Model):
    title = models.CharField(max_length=300)
    author = models.ForeignKey(User,related_name='blog_post',on_delete=models.PROTECT)
    body = models.TextField()
    publish = models.DateTimeField(default=timezone.now)

    class Meta:
        ordering = ("-publish",)
        db_table = 'yf_BogArticles'


    def __str__(self):
        return self.title 

然后 根据步骤 迁徙数据库

在python中方法名如果是__xxxx__()的,那么就有特殊的功能,因此叫做“魔法”方法
当使用print输出对象的时候,只要自己定义了__str__(self)方法,那么就会打印从在这个方法中return的数据
__str__方法需要返回一个字符串,当做这个对象的描写

1. __init__和__delete__

__init__()函数的意义等同于类的构造器(同理,__del__()等同于类的析构函数)。因此,__init__()方法的作用是创建一个类的实例。

 

2. __call__

__call__()的作用是使实例能够像函数一样被调用,同时不影响实例本身的生命周期(__call__()不影响一个实例的构造和析构)。但是__call__()可以用来改变实例的内部成员的值。

 

3. __new__

__new__方法的调用是发生在__init__之前的, __new__发生在实例化之前,__init__初始化发在实例化之后 所以可以用__new__简单实现单例。

    #用__new__实现单例
class Singleton(object):
   def __new__(cls):
      if not hasattr(cls,'instance'):
         cls.instance = super().__new__(cls)
      return cls.instance
   
obj1 = Singleton()
obj2 = Singleton()
 
print(obj1==obj2) #True

4. __str__

__str__是被print函数调用的,一般都是return一个字符串。当打印一个类的时候,那么print首先调用的就是类里面的定义的__str__
posted @ 2021-02-09 21:37  shmily墨鱼  阅读(112)  评论(0)    收藏  举报