Django学习笔记——第一天

Why should i decide to learn the Django?

想学习python的web框架有一段时间了,自上次寒假开始就有这样的计划,也为此付之行动了一段时间,但倒是还是贪玩,慢慢就荒废了。而选择django也是综合考虑了一番,那就启程吧!!!

参考资料:

官方文档
《跟老齐学Python Django实战》
《使用Django架站的16课》
参照刘江的blog

环境配置:

Python3.6
django1.10

第一天

Let’s go!!!

  • 创建项目Project
    命令行下使用 django-admin startproject Project_name ,这里我的项目是mysite
  • 创建应用APP
    命令行下使用 django-admin startapp app_name ,这里我的 app_name 是 blog

    或者使用 python manage.py startapp app_name
    django-admin.py是安装django后有的,bin目录下,而项目目录下的manage.py封装了django-admin的操作

    OK,查看刚刚创建的项目结构:
    这里写图片描述
    从图片可看出,生成了 mysite,blog文件夹和manage.py
    再分别查看 mysite,blog 结构,如下图:
    这里写图片描述
    这里写图片描述
    结构解释:

  • manage.py
    就是封装了一些命令的工具,如上面所述的django-admin。

  • mysite 具有管理项目的功能
    • settings.py:项目初始化、参数配置等文件
    • urls.py:路由配置文件,使得 url 能指向某个函数或视图(template)
    • wsgi.py:提供底层的网络通信功能,可百度一下WSGI
    • init.py:使得mysite变成可以import的库
  • blog 创建的应用
    • init.py:类似上面的
    • admin.py:管理工具,如可以向管理增加新应用
    • apps.py:没啥用
    • models.py:定义应用的数据模型
    • tests.py:测试用的
    • views.py:定义视图函数、视图类
    • migrations:存储数据库表结构的指令
      这里我们要明确,不止创建一个APP

基本配置

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
# 开发模式DEBUG设置为True,运行时可以显示错误信息
# 但生产环境必须修改为False
ALLOWED_HOSTS = []
#填写主域名,使网站可被访问。开发模式下可为空

# Application definition
# 这里填入你创建的应用名,如blog,才能告诉django这是我们一伙的
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog',
]

数据库配置,这里使用默认的SQLite。你可能还没看到SQLite的影子,稍等一会儿。

# Database
# 可参考官方文档其余数据库配置
# https://docs.djangoproject.com/en/1.11/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

时区语言等

LANGUAGE_CODE = 'zh-hans'

TIME_ZONE = 'Asia/Shanghai'

运行项目

命令行下 python manage.py runserver
这里写图片描述
打开http://127.0.0.1:8000/
这里写图片描述
如图所示,成功踏出第一小步了!!!
这时你会发现 mysite 根目录下生成了 db.sqlite3 文件,这就是我们的数据库了。

数据模型的确定及编写

我们搭建一个web项目前,要明确需要实现那些功能,对吧。而model也就对应这些功能。
我们这里只是简单编写博客,只需要管理博客的类就好了。

切换到 blog 目录下,编写 models.py
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):#继承自models.Model
    #字段和其属性
    title=models.CharField(max_length=30)
    author=models.ForeignKey(User,related_name="blog_posts")
    body=models.TextField()
    publish=models.DateTimeField(default=timezone.now)

    class Meta:
        #按照publish逆顺序显示
        ordering=("-publish")

    def __str__(self):
        #为了在页面中不单调显示,而显示文章标题
        return self.title

首先要明确,在Django中不需直接编写SQL语句,django能完成相应的数据库操作。

你能从代码中看到我们定义了 title、author等属性,在数据库表中把它们称作字段。而字段又有属性,形如 CharField() 。

注意,ordering 必须是列表或元组,要有逗号。

  • 建立数据库表
    命令行下python manage.py makemigrations

    PS D:\PyCharm 2017.3\PyProjects\LearningDjango\mysite> python3 manage.py makemigrations
    Migrations for ‘blog’:
    blog\migrations\0001_initial.py
    -Create model BlogArticles


查看一下00001_initial.py,可发现,就是定义了一般的数据库表和操作方式。
        migrations.CreateModel(
            name='BlogArticles',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('title', models.CharField(max_length=30)),
                ('body', models.TextField()),
                ('publish', models.DateTimeField(default=django.utils.timezone.now)),
                ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='blog_posts', to=settings.AUTH_USER_MODEL)),
            options={
                'ordering': ('-publish',),
            },
    ]
  • 创建数据库
    命令行下 python manage.py migrate, OK,模型对应的数据库就创建好了。

  • 在 admin.py 中注册该数据模型

from django.contrib import admin
# 引入blog模型
from .models import BlogArticles
# Register your models here.
admin.site.register(BlogArticles)#注册

你也能在admin.py增加一些内容

from django.contrib import admin
from .models import BlogArticles
class BlogAdmin(admin.ModelAdmin):
    list_display=['title','author','publish']
    list_filter=['author','publish']
    #search_fields=['title','body']#搜索框
    raw_id_fileds=['author']
    date_hierarchy='publish'
    ordering=['publish','author']
# Register your models here.
admin.site.register(BlogArticles,BlogAdmin)
创建超级管理员以便登录并发表网站

命令行下 python manage.py createsuperuser ,并相应创建密码等。
创建好后,浏览器打开 http://127.0.0.1:8000/admin/ ,用刚创建的用户名密码登录即可。

你能看到有个 BLOGARTICLES 选项,可以增加文章。
这里写图片描述


posted @ 2018-05-12 21:28  不知道的痛  阅读(173)  评论(0编辑  收藏  举报