Django的秘笈
前言
在学习Django时,有一些规则性的要求,以及初学者特有的句法和写法,这些可以称之为“呪文”。为了避免与其他语言的“呪文”混淆或错误地使用类似的“呪文”,我们需要将这些“呪文”记录在自己的文档中,以供参考。
环境
-
- windows11 64bit
-
- VScode
-
- python v3.9.6 64bit
- django v4.0.1
构成
项目创建
django-admin startproject hogehoge
应用程序开发
python manage.py startapp hogehoge
创建数据库
python manage.py migrate
创建用户 (Yuè zhě de zuò
python manage.py createsuperuser
服务器启动
python manage.py runserver
其他
mkdir templates
mkdir static
mkdir media
touch ./hogehogeapp/urls.py
touch ./templates/base.html
touch ./templates/hoge.html
touch ./static/style.css
构成
- hogehogeproject
- hogehogeproject
- hogehogeapp
- templates
- static
- media
- db.sqlite3
- manage.py
编码
hogehogeproject/setting.py的设定文件
# ベースのパスの追加
BASE_DIR = Path(__file__).resolve().parent.parent
# アプリケーションの組み込み
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'hogehogeapp',
]
# テンプレートの指定
TEMPLATES = [
{
'BACKEND': ...,
'DIRS': [BASE_DIR, 'templates'],
'APP_DIRS': True,
'OPTIONS': {
...,
},
},
]
# cssの指定
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/4.0/howto/static-files/
STATIC_URL = 'static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
# 画像の指定
MEDIA_ROOT = os.path.join(BASE_DIR, 'media') # 画像を保存するURL
MEDIA_URL = '/media/' #画像を表示するURL
模板/基本.html
从这里复制起始模板,创建一个块。
<!doctype html>
<html lang="ja">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- Bootstrap CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
{% block customcss %}
{% endblock customcss %}
<title>Hello, world!</title>
</head>
<body>
{% block header %}
{% endblock header %}
{% block content %}
{% endblock content %}
<!-- Optional JavaScript; choose one of the two! -->
<!-- Option 1: Bootstrap Bundle with Popper -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script>
<!-- Option 2: Separate Popper and Bootstrap JS -->
<!--
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.2/dist/umd/popper.min.js" integrity="sha384-IQsoLXl5PILFhosVNubq5LC7Qb9DXgDA9i+tQ8Zj3iwWAwPtgFTxbJ8NT4GN1R8p" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.min.js" integrity="sha384-cVKIPhGWiC2Al4u+LWgxfKTRIcfu0JTxR+EQDz/bgldoEyl4H0zUF0QKbrJ0EcQF" crossorigin="anonymous"></script>
-->
</body>
</html>
模板/hohe.html
{% extends 'base.html' %}
{% load static %}
{% block customcss %}
<link rel='stylesheet' type='text/css' href="{% static 'style.css' %}">
{% endblock customcss %}
{% block header %}
{% endblock header %}
{% block content %}
{% endblock content %}
给出的建议
- フォームを使用する場合はトークンを付与する
<form method="POST" action="">{% csrf_token %}
</form>
hogehogeproject/urls.py的中文释义如下:
豪格豪格项目/urls.py
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('hogehogeapp.urls')),
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)+ static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
好好app的模型
from django.db import models
class HogeModel:
title = models.CharField(max_length=100)
txt = models.TextField()
no = models.IntegerField()
duedate = models.DateField()
def __str__(self):
return self.title
使用hogehogeapp/views.py文件中的原始代码进行重新表述的中文版本。
# import
from django.views.generic import ListView, DetailView, CreateView, DeleteView, UpdateView
from django.contrib.auth.models import User
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.decorators import login_required
from django.shortcuts import render, redirect
from django.http import HttpResponse
from django.urls import reverse_lazy
# 関数型
def hogefunc(request):
return HttpResponse("Hello, World!")
def hoge1func(request):
return render(request, 'hogehoge.html')
@login_required
def hoge2func(request):
return redirect('hoge2')
# クラス型
class HogeList(ListView):
template_name = 'hoge.html'
model = HogeModel
class HogeDetail(DetailView):
template_name = 'hoge.html'
model = HogeModel
class HogeCreate(CreateView):
template_name = 'hoge.html'
model = HogeModel
fields = ('title', 'txt', 'no', 'duedate')
success_url = reverse_lazy('hoge')
class HogeDelete(DeleteView):
template_name = 'hoge.html'
model = HogeModel
success_url = reverse_lazy('hoge')
class HogeUpdate(UpdateView):
template_name = 'hoge.html'
model = HogeModel
fields = ('title', 'txt', 'no', 'duedate')
success_url = reverse_lazy('hoge')
提示
HttpResponse/ render / redirectの違い
こちらの記事がわかりやすかったです。
redirectやreverse_lazyで、hogehogeapp/urls.pyで定義したnameを指定
hogehogeapp/urls.py的名称
from django.urls import path
from .views import hogefunc, hoge1func, hoge2func, HogeList, HogeDetail, HogeCreate, HogeDelete, HogeUpdate
urlpatterns = [
path('hoge/', hogefunc, name='hoge'),
path('hoge1/', hoge1func, name='hoge1'),
path('hoge2/', hoge2func, name='hoge2'),
path('list/', HogeList.as_view(), name='list'),
path('detail/<int:pk>', HogeDetail.as_view(), name='detail'),
path('create', HogeCreate.as_view(), name='create'),
path('delete/<int:pk>', HogeDelete.as_view(), name='delete'),
path('update/<int:pk>', HogeUpdate.as_view(), name='update'),
]
提示
- クラスベースの場合は、クラス名+**as_view()**をつける
末尾说明
考虑到知识和理解的不足,以及解释不够详细和应该更加关注的事项,我会根据学习的需要不断更新内容。
请提供更多上下文或者需求以便我更好地回答您的问题。
-
- Django ドキュメント
-
- Bootstrap
- くまのブログ – 【Django】render / redirect / HttpResponseなどの違い
最新版本的记录
- 2023/01/11: 記事公開