使用Django和SQLite
使用Django访问SQLite数据库的步骤。
简要概述
以下是有关在创建Django应用时使用数据库(DB)的配置方法的说明。
在这里,我们将使用SQLite。
SQLite不适合大型应用程序,因此如果您的应用程序需要同时处理多个访问,请从一开始就考虑使用其他数据库。
我們將使用 Windows 作業系統。我們將使用 VisualStudioCode(以下稱為 VSCode)進行操作。按照下面的步驟進行創建。
-
- 模型类的定义
-
- 创建迁移文件
-
- 执行迁移
-
- 显示Django管理网站
-
- 创建管理账号
-
- 将模型注册到管理工具
-
- 向模型添加条目
- 添加计数值
假设事前已经进行了以下设置。
模型类的定义
在这里我们要创建一个计数器。
当按下按钮时,计数会增加,所以需要记住计数的数量。我们将使用数据库来管理计数的数量。
在models.py中创建一个类,并对成员变量定义计数器数量。
from django.db import models
# Create your models here.
class Counter(models.Model):
number = models.IntegerField()
创建迁移文件 mí
创建迁移文件。命令如下。将”app01″部分替换为所输入的命令名称。
python .\manage.py makemigrations app01
(venv) PS C:\ws\sample> python .\manage.py makemigrations app01
Migrations for 'app01':
app01\migrations\0001_initial.py
- Create model Counter
执行迁移
执行迁移操作。命令如下:
python .\manage.py migrate
(venv) PS C:\ws\sample> python .\manage.py migrate
Operations to perform:
Apply all migrations: admin, app01, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying app01.0001_initial... 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 auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying auth.0012_alter_user_first_name_max_length... OK
Applying sessions.0001_initial... OK
Django管理站点的显示
Django提供了一个用于管理数据的Django管理网站。
如果查看project/urls.py文件,会发现从一开始就定义了”admin/”。
urlpatterns = [
path('admin/', admin.site.urls),
当您启动Django服务器并在浏览器中打开以下URL时,将显示Django管理网站。
http://127.0.0.1:8000/admin
创建管理账户
为了使用Django管理网站,您需要一个管理帐户。您需要创建一个用于登录该网站的用户名和密码。
由于这是通过命令执行的操作,因此需要在VScode的终端中输入以下命令:
python .\manage.py createsuperuser
密码已设置为app01admin。由于这只是一个示例,所以密码很简单,但在实际生产中会使用更复杂的密码。
另外,提一下,在运营时为了抵御攻击,会将admin这个URL改为其他名称或者禁用。
(venv) PS C:\ws\sample> python .\manage.py createsuperuser
ユーザー名 (leave blank to use 'main'): admin
メールアドレス:
Password:
Password (again):
Superuser created successfully.
将模型注册到管理工具中。
注册管理模型。如果不这样做,Django管理站点将无法显示所创建的模型。
登录到Django管理网站后,将显示以下画面:
在注册之前,显示了认证和授权/组,用户。
请在app01/admin.py中添加以下内容。
from django.contrib import admin
+ from .models import Counter
# Register your models here.
+ admin.site.register(Counter)
在注册后,APP01 / Counters 的显示会增加。
在模型中添加记录
在Django管理网站上,点击“Counters”并添加记录。
点击“新增计数器”。
在输入框中输入数字0,然后点击保存按钮。
有一张唱片被添加了。
增加计数值
我們將在模板上顯示計數值。
{% extends 'app01/base.html' %}
{% block content %}
<div class="bg-primary text-white">
{{text}}
</div>
+ <div>
+ {{number}}
+ </div>
{% endblock content %}
在views.py中编写代码将计数值传递给模板。
from django.shortcuts import render
+ from .models import Counter
# Create your views here.
def index(request):
+ record = Counter.objects.get()
message = {
'title':'app01',
'text':'Hello',
+ 'number':f'{record.number}',
}
return render(request, 'app01/index.html', message)
当运行Djyango服务器并显示app01时,计数值将会显示出来。
增加按钮
添加计数按钮和清除按钮,以完成它。
{% extends 'app01/base.html' %}
{% block content %}
<div class="bg-primary text-white">
{{text}}
</div>
<div>
{{number}}
+
+ <form action="{{countup_url}}" method="get">
+ <div class="button1">
+ <button name="BTN1" type="submit" class="btn btn-primary">カウントアップ</button>
+ </div>
+ </form>
+ <form action="{{clear_url}}" method="get">
+ <div class="button2">
+ <button name="BTN2" type="submit" class="btn btn-secondary">クリア</button>
+ </div>
+ </form>
</div>
{% endblock content %}
from django.shortcuts import render
from .models import Counter
+MY_URL = 'http://127.0.0.1:8000/'
# Create your views here.
def index(request):
record = Counter.objects.get()
message = {
'title':'app01',
'text':'Hello',
'number':f'{record.number}',
+ 'countup_url':MY_URL + 'countup',
+ 'clear_url':MY_URL + 'clear',
}
return render(request, 'app01/index.html', message)
+def countup(request):
+ record = Counter.objects.get()
+ record.number += 1
+ record.save()
+ return index(request)
+
+def clear(request):
+ record = Counter.objects.get()
+ record.number = 0
+ record.save()
+ return index(request)
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('app01.urls')),
+ path('/countup/', include('app01.urls')),
+ path('/clear/', include('app01.urls')),
]
from django.urls import path
from . import views
urlpatterns = [
path('', views.index),
+ path('countup', views.countup),
+ path('clear', views.clear),
]
按下”カウントアップ”按钮会递增,按下”クリア”按钮会归零。