用Django/Mac创建的针对新工程师的新工程师编写的新工程师ToDo应用程序
首先
你好,我是一位没有实际工作经验/没有任何IT知识的新手工程师。
这次我第一次使用Python/Django开发了一个应用程序。
这是我第一次制作应用程序,我感到非常兴奋!然而,这种兴奋感在一瞬间被打破了…
我自己的知识和经验明显不足,完全无法动手…
那一刻,真的很痛苦…
为了不让其他新人工程师有同样的经历,我打算记录下来!
进行的内容
用电脑:苹果电脑
-
- Pythonのインストール
-
- Djangoでの開発環境の準備
- ToDoListの機能を持ったWebアプリケーション開発
Python的安装
首先,我进行了开发所用Python的安装。
另外,还需要先安装用于安装Python的工具。
作为一个初学者,我在这个阶段已经很难了…
安装Homebrew
首先,我们要确认Homebrew是否已经安装成功。
启动终端,并执行以下命令。
brew -v
关于显示
如果显示为 “zsh: command not found: brew”
表示没有安装Homebrew
如果显示为 “Homebrew ~.~.~”
表示已经安装了,所以可以跳过这一步。
请在终端中执行以下命令。
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
在使用搭载M1芯片的Mac电脑时,请执行以下两个命令。
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zshrc
source ~/.zshrc
接下来,执行以下命令。
brew -v
只要显示类似「Homebrew ~.~.~」这样的文字就可以了!
安装pyenv
首先,需要确认一下是否安装了pyenv。
执行以下命令
pyenv -v
关于显示
如果显示为“zsh: command not found: pyenv”
这意味着尚未安装Homebrew
如果显示为“pyenv ~.~.~”
表示已经安装,所以可以跳过这一节
执行以下命令
brew install pyenv
执行以下命令
pyenv -v
只要显示类似「pyenv ~.~.~」的文字就可以了!
pyenv的配置
执行以下命令后,您可以将pyenv初始化配置的设置写入.zshrc文件中。
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
通过执行以下命令,使.zshrc文件的设置生效。
source ~/.zshrc
通过以上步骤,pyenv的设置已经完成。
安装xz
执行下列命令。
brew install xz
安装Python
首先,我们将检查要安装的版本。
请执行下面的命令
pyenv install --list
找到以「3.6.5」或类似数字开头的部分。
这里显示的是当前可安装的Python版本。
请执行以下命令以安装(刚刚查询到的最新版本)。
pyenv install 3.13.0a0
接下来,请执行以下命令以进行版本确认。
pyenv versions
在这种状态下,您无法使用之前安装的版本。
请运行以下命令。
pyenv global 3.13.0a0
执行并确认以下命令。
python --version
准备Django开发环境。
Django的安装
创建用于管理应用程序的目录。
移动到先前的目录,然后在终端中执行以下命令。
pip3 install django
确认Django是否已安装并查看其版本。
请用Shell脚本执行以下命令。
python -m django --version
现在我们已经准备好了所有Web应用程序开发所需要的东西。
接下来,让我们开始开发正题的Web应用程序吧!
开发具备ToDoList功能的Web应用程序
创建项目
那么,我们开始开发ToDo应用程序了。
这篇文章我参考了一下。
第一次使用Django时,需要进行初始设置。
通常情况下,会自动生成用于构建Django项目的代码。
(此处省略有关项目的说明)
用命令行将代码移到所需的目录中
执行以下命令
django-admin startproject mysite
让我们看一下,这将在当前目录下创建一个名为mysite的文件夹。
mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
在这里,我们将省略对每个文件角色的解释。
开发服务器
让我们验证一下Django项目能否正常运行。
如果能够导航到外部的mysite目录下,请执行以下命令。
python manage.py runserver
然后,在命令行上可以看到以下输出。
Performing system checks...
System check identified no issues (0 silenced).
You have unapplied migrations; your app may not work properly until they are applied.
Run 'python manage.py migrate' to apply them.
8月 23, 2023 - 13:00:00
Django version 4.2, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
现在,Django开发服务器已经成功启动了。请使用浏览器访问Django并尝试一下!
只要出现了显示“恭喜!”并且火箭升空的页面,那就算成功了!
制作ToDoList应用程序
好吧,终于要开始制作应用程序了。
应用程序可以放在Python路径的任何位置。
请移动到任意目录下,并执行以下命令。
python manage.py startapp todo
通过这个命令,将创建一个名为ToDo的目录。
整体情况如下所示。
todo/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.py
集成的ToDo应用程序
我将编辑下面的文件并将ToDo应用程序集成进去。
mysite/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'todo.apps.TodoConfig', #todoアプリケーションの組み込み
]
创建待办事项应用程序的模型
这次我们创建了一个模型,包括「标题」、「内容」、「优先级」和「截止日期」。
输入了如下所示的代码。
from django.db import models
# Create your models here.
CHOICE = (('danger','high'),('warning','normal'),('primary','low'))
class TodoModel(models.Model):
title = models.CharField(max_length=100)
contents = models.TextField()
priority = models.CharField(
max_length=50,
choices = CHOICE,
null =True
)
duedate = models.DateField()
#管理画面のobjectの表示をタイトルと一致して表示
def __str__(self):
return self.title
创建一个ToDo应用程序的视图
使用Django的通用视图来创建ToDo应用程序的视图,以便支持每个功能的要求。
我输入了以下代码。
from django.shortcuts import render
from django.views.generic import ListView,DetailView,CreateView,DeleteView,UpdateView
from .models import TodoModel
from django.urls import reverse_lazy
# ToDoの一覧表示機能
class TodoList(ListView):
template_name = 'todo/list.html'
model = TodoModel
# ToDoの詳細表示機能
class TodoDetail(DetailView):
template_name = 'todo/detail.html'
model = TodoModel
# ToDoの作成機能
class TodoCreate(CreateView):
template_name = 'todo/create.html'
model = TodoModel
fields = ('title','contents','priority','duedate')
success_url = reverse_lazy('list')
# ToDoの削除機能
class TodoDelete(DeleteView):
template_name = 'todo/delete.html'
model = TodoModel
success_url = reverse_lazy('list')
# ToDoの編集機能
class TodoUpdate(UpdateView):
template_name = 'todo/update.html'
model = TodoModel
fields = ('title','contents','priority','duedate')
success_url = reverse_lazy('list')
設定ToDo應用程式的URL
首先,在通過浏览器连接时,需要在mysite的URL设置中引用todo应用程序的URL设置,而不是mysite的URL设置。
输入以下代码
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
path('admin/', admin.site.urls),
path('',include('todo.urls')),
]
接下来,按照以下的方式输入代码。
#from django.contrib import admin
from django.urls import path,include
from todo.views import TodoList,TodoDetail,TodoCreate,TodoDelete,TodoUpdate
urlpatterns = [
path('list/', TodoList.as_view(),name='list'),
path('detail/<int:pk>', TodoDetail.as_view(),name='detail'),
path('create', TodoCreate.as_view(),name='create'),
path('delete/<int:pk>',TodoDelete.as_view(),name='delete'),
path('update/<int:pk>',TodoUpdate.as_view(),name='update')
创建一个ToDo应用程序的模板。
首先,在todo目录下创建一个用于模板的目录。
請按照以下方式創建HTML基礎模板:
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.1.3/dist/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
<title>Hello, world!</title>
</head>
<body>
{% block header %}
{% endblock header %}
{% block content %}
{% endblock content %}
</body>
</html>
通过扩展这个基础,可以省略重复的部分。
用于ToDo列表显示功能的模板
按照以下方式创建
{% extends 'base.html' %}
{% block header %}
<div class="jumbotron jumbotron-fluid">
<div class="container">
<h1 class="display-4">TodoList</h1>
<p class="lead">TodoListを作成して、生産的な毎日を過ごしましょう</p>
</div>
</div>{% endblock %}
{% block content %}
<div class="container">
<a href="{% url 'create' %}" class="btn btn-secondary mb-2 " tabindex="-1" role="button" aria-disabled="true">新規作成画面へ</a>
{% for item in object_list %}
<div class="alert alert-{{ item.priority }}" role="alert">
<p>{{ item.title }} 期日{{ item.duedate | date:"o/n/j "}}</p>
<a href="{% url 'update' item.pk %}" class="btn btn-info " tabindex="-1" role="button" aria-disabled="true">編集画面へ</a>
<a href="{% url 'delete' item.pk %}" class="btn btn-success " tabindex="-1" role="button" aria-disabled="true">削除画面へ</a>
<a href="{% url 'detail' item.pk %}" class="btn btn-primary " tabindex="-1" role="button" aria-disabled="true">詳細画面へ</a>
</div>
{% endfor %}
</div>
{% endblock content %}
为了ToDo的新建功能所创建的模板。
按照以下方式创建
{% extends 'base.html' %}
{% block content %}
<form action = '' method = 'POST'>{% csrf_token %}
{{ form.as_p }}
<input type = 'submit' value = 'create'>
</form>
{% endblock content %}
用于ToDo详细显示功能的模板。
根据以下方式创建
{% extends 'base.html' %}
{% block header %}
<div class="alert alert-dark" role="alert">
detail
</div>
{% endblock %}
{% block content %}
<div class="alert alert-success" role="alert">
{{ object.title }}
</div>
<div class="alert alert-success" role="alert">
{{ object.contents }}
</div>
{% endblock content %}
用于ToDo删除功能的模板。
以下就中译意思成下面这样编写
{% extends 'base.html' %}
{% block content %}
<form action = '' method = 'POST'>{% csrf_token %}
<input type = 'submit' value = 'delete'>
</form>
{% endblock content %}
用于ToDo更新功能的模板
按照以下方式创建
{% extends 'base.html' %}
{% block content %}
<form action = '' method = 'POST'>{% csrf_token %}
{{ form.title }}
{{ form.contents }}
{{ form.priority }}
{{ form.duedate }}
<input type = 'submit' value = 'update'>
</form>
{% endblock content %}
待办事项应用的迁移
您需要在数据库中创建用于ToDo应用程序的表格。
请进入外部的mysite目录并执行以下命令。
python manage.py makemigrations
python manage.py migrate
待办事项应用程序的管理员
按照下面的方式创建
from django.contrib import admin
from .models import TodoModel
# Register your models here.
admin.site.register(TodoModel)
确认应用程序的运行
因为程序已经完成,现在让我们进行操作确认!
利用下面的命令来启动服务器。
python manage.py runserver
以上, ToDoList的应用程序已经完成了!
就算是这样简单的网站,也要经历这么多的步骤啊。
如果变成复杂的网站的话,我们还是别去考虑了。
闲话
对于即将学习Django的新人工程师,我只想告诉你一件事。
抄袭并不是一件坏事,但机械式地学习是不可取的。
说实话,我就是因为机械地学习并遇到困境而感到焦虑。
如果不理解各个文件的角色和处理流程,当出现错误时完全不知道该如何进行修复。
然而,一旦理解了各个文件的角色和处理流程,工作效率就大幅提升了。
希望你可以参考这个故事,努力学习吧!
参考网站
Python安装
Django入门
ToDoList应用