使用Python Django Girl入门(从安装开始)
Django的MTV设计模式(模型·视图·模板)
模型:存储在数据库中的数据和相关处理(由models.Model提供)
模板:由模板文件设计的每个页面的布局
视图:为每个请求的URI描述要显示哪个页面的处理过程。
项目创建的步骤
-
- 使用django-admin startproject命令创建项目
使用python manage.py migrate命令构建数据库
使用python manage.py runserver命令进行临时运行确认
使用./manage.py startapp命令添加应用程序。
在appname/models.py中编写该应用程序使用的模型(数据库表)。
将创建的应用程序添加到project/settings.py中
更新数据库
在appname/views.py中编写模型的显示和操作(添加、编辑等)。
在这里准备使用的html。
编写appname/urls.py,链接url和views
从project/urls.py中加载appname/urls.py。
基本的开发流程
在models.py中确定数据库的结构
创建模板(外观)
在urls.py中添加文件路径
静态文件在static文件夹中
在views.py中从数据库中提取数据并渲染其他模板
或从模板中将数据写入数据库中
安装Django
创建和启动虚拟环境
$ mkdir djangogirls
$ cd djangogirls
$ python3 -m venv myvenv
$ source myvenv/bin/activate
更新pip
(myvenv) ~$ python3 -m pip install --upgrade pip
创建 requirements.txt
djangogirls
└───requirements.txt
请在djangogirls/requirements.txt文件中添加以下文本
Django~=2.0.6
Django的安装
(myvenv) ~$ pip install -r requirements.txt
Collecting Django~=2.0.6 (from -r requirements.txt (line 1))
Downloading Django-2.0.6-py3-none-any.whl (7.1MB)
Installing collected packages: Django
Successfully installed Django-2.0.6
创建项目
(myvenv) ~/djangogirls$ django-admin startproject mysite .
(myvenv) ~/djangogirls$ tree
djangogirls
├───manage.py
├───mysite
│ settings.py
│ urls.py
│ wsgi.py
│ __init__.py
└───requirements.txt
manage.py是一个有用的脚本,用于管理网站。通过使用它,在不安装其他东西的情况下,我们可以在我们的计算机上启动Web服务器。
settings.py文件中包含了网站的设置。
你还记得我们谈过的关于确认邮寄信件地址的快递公司吗?在urls.py文件中,包含了用于urlresolver的模式列表。
现在让我们忽略我们不打算更改的其他文件。唯一需要记住的是,不要错误地删除它们!
更改设置
TIME_ZONE = 'Asia/Tokyo'
LANGUAGE_CODE = 'ja'
#静的ファイルのパス
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
#ホストの追加(defaultは['localhost', '127.0.0.1', '[::1]'])
ALLOWED_HOSTS = ['127.0.0.1', '.pythonanywhere.com']
数据库的设置
(myvenv) ~/djangogirls$ python manage.py migrate
Operations to perform:
Apply all migrations: auth, admin, contenttypes, sessions
Running migrations:
Rendering model states... DONE
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying sessions.0001_initial... OK
开始
(myvenv) ~/djangogirls$ python manage.py runserver
ブラウザで
http://127.0.0.1:8000/

创建博客
Django模型
因为我们知道了对象是什么,所以让我们创建一个Django模型的博客文章。
Django的模型是一种特殊的对象,它们会被存储在数据库中。数据库是数据的集合,用于存储用户和博客文章的信息。我们使用SQLite数据库来存储数据。这是Django的默认数据库,目前来说足够了。
在数据库中,可以将模型视为具有列(字段)和行(数据)的电子表格。
(我的虚拟环境)~/djangogirls$ python manage.py startapp blog
-> (我的虚拟环境)~/djangogirls$ python manage.py 创建博客应用
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog',
]
from django.db import models
from django.utils import timezone
class Post(models.Model):
author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
title = models.CharField(max_length=200)
text = models.TextField()
created_date = models.DateTimeField(
default=timezone.now)
published_date = models.DateTimeField(
blank=True, null=True)
def publish(self):
self.published_date = timezone.now()
self.save()
def __str__(self):
return self.title
在数据库中创建用于模型的表格
最后一步是将新模型添加到数据库中。首先,让Django知道模型有一些小的更改(当前创建的)。
(myvenv) ~/djangogirls$ python manage.py makemigrations blog
Migrations for 'blog':
blog/migrations/0001_initial.py:
- Create model Post
在数据库中添加
python manage.py migrate blog
Django 管理员界面
在进行添加、编辑和删除刚刚创建的帖子时,使用Django管理系统。
请在编辑器中打开blog/admin.py文件,并将其内容更改为以下方式:
from django.contrib import admin
from .models import Post
admin.site.register(Post)

要登录,您需要创建一个superuser(管理网站的用户)。
登录时需要先创建一个superuser(管理整个网站的用户)。
(myvenv) ~/djangogirls$ python manage.py createsuperuser
Username: admin
Email address: admin@admin.com
Password:
Password (again):
Superuser created successfully.

使用PythonAnywhere和git进行部署。
Django的数据库连接
(myvenv) ~/djangogirls$ python manage.py shell
更新位于服务器上的静态文件
$ workon <your-pythonanywhere-username>.pythonanywhere.com
(ola.pythonanywhere.com)$ python manage.py collectstatic
[...]
从模型创建到迁移脚本执行的过程
创建模型(每个应用的models.py)
↓
将应用加载到项目中(在mysite的settings.py的INSTALLED_APP中)
↓
基于模型创建迁移脚本(makemigrations)
↓
执行迁移脚本(migrate)
当进行DB更改时,会对模型或者DB的类型进行更新。
$ python manage.py makemigrations blog
$ python manage.py migrate blog
DB的操作
$ python manage.py shell
>>> from blog.models import Post
データ全表示
>>> Post.objects.all()
<QuerySet [<Post: my post title>, <Post: another post title>]>
ユーザ一覧
>>> from django.contrib.auth.models import User
>>> User.objects.all()
<QuerySet [<User: ola>]>
>>> me = User.objects.get(username='ola')
新しいPostを作成
>>> Post.objects.create(author=me, title='Sample title', text='Test')
オブジェクトの抽出
>>> Post.objects.filter(author=me)
>>> Post.objects.filter(title__contains='title')
>>> from django.utils import timezone
>>> Post.objects.filter(published_date__lte=timezone.now())
>>> post = Post.objects.get(title="Sample title")
>>> post.publish()
並び替え
>>> Post.objects.order_by('created_date')
逆順
>>> Post.objects.order_by('-created_date')
クエリセットをつなげる
>>> Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date')
pk是主键!
表格中的数据按照1.2.3…的顺序进行了注册。