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 选项,可以增加文章。