使用Python Django Girl入门(从安装开始)

Django的MTV设计模式(模型·视图·模板)

模型:存储在数据库中的数据和相关处理(由models.Model提供)
模板:由模板文件设计的每个页面的布局
视图:为每个请求的URI描述要显示哪个页面的处理过程。

项目创建的步骤

    1. 使用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/
install_worked.png

创建博客

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)
login_page2.png

要登录,您需要创建一个superuser(管理网站的用户)。

登录时需要先创建一个superuser(管理整个网站的用户)。

(myvenv) ~/djangogirls$ python manage.py createsuperuser
Username: admin
Email address: admin@admin.com
Password:
Password (again):
Superuser created successfully.

django_admin3.png

使用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…的顺序进行了注册。

请提供一个参考网址

广告
将在 10 秒后关闭
bannerAds