Es ist ein Mac.
Erstellen Sie eine Umgebung mit venv und installieren Sie django.
$python -m venv <environmentName>
$cd <environmentName>
$source bin/activate
$pip install --upgrade pip
$pip install django==2.0.1
$django-admin startproject <projectName> .
$python manage.py startapp <applicationName>
Ende 2019 ist Django Version 3. Wenn Sie es installieren, ohne etwas zu tun, wird es passieren und Sie können sich möglicherweise nicht beim Administrator anmelden, sodass die Verwendung von 2 Systemen sicher ist.
Ich werde unten gehen.
environmentName = reh
projectName = rehabili
applicationName = reha
python:rehabili/python:setting.py
# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'ja'
# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Tokyo'
Öffnen Sie http://127.0.0.1:8000/ oder http: // localhost: 8000 / mit einem Browser und sind Sie erfolgreich, wenn die Rakete herauskommt
reh/models.py
from django.db import models
class SamplePost(models.Model):
postname = models.CharField('name', max_length=999)
postfrom = models.CharField('from', max_length=999, blank=True)
postlength = models.IntegerField('length', blank=True, default=0)
def __str__(self):
return self.postname
class SamplePost2(models.Model):
postname2 = models.ForeignKey(SamplePost, verbose_name='postname', related_name='samplepost2', on_delete=models.CASCADE)
comment = models.TextField('comment', blank=True)
def __str__(self):
return self.comment
reh/admin.py
from django.contrib import admin
from reh.models import SamplePost, SamplePost2
admin.site.register(SamplePost)
admin.site.register(SamplePost2)
python:rehabili/python:setting.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'reh', #Fügen Sie hier den erstellten App-Namen hinzu
]
Melden Sie sich mit dem Superuser an, den Sie zuvor erstellt haben http://localhost:8000/admin/
Ich habe hier darauf hingewiesen. Elemente, die geändert werden können, werden in der Liste auf dem Verwaltungsbildschirm erhöht. https://qiita.com/kaki_k/items/7b178ad39394a031b50d
reh/admin.py
from django.contrib import admin
from reh.models import SamplePost, SamplePost2
class SamplePostAdmin(admin.ModelAdmin):
list_display = ('id', 'postname', 'postfrom', 'postlength',) #Elemente, die Sie auflisten möchten
list_display_links = ('id', 'postname',) #Elemente, die mit dem Korrekturlink angeklickt werden können
admin.site.register(SamplePost, SamplePostAdmin)
class SamplePost2Admin(admin.ModelAdmin):
list_display = ('id', 'comment',)
list_display_links = ('id', 'comment',)
raw_id_fields = ('postname2',) #Ziehen Sie den externen Schlüssel nicht herunter (verhindert Zeitüberschreitung, wenn die Anzahl der Daten zunimmt).
admin.site.register(SamplePost2, SamplePost2Admin)
Erstellen Sie urls.py in Ihrem Apps-Ordner und fügen Sie es aus der urls.py Ihres Projekts ein.
reh/views.py
from django.shortcuts import render
from django.http import HttpResponse
def reh_list(request):
return HttpResponse('Reh-Liste')
reh/urls.py
from django.urls import path
from reh import views
app_name = 'reh'
urlpatterns = [
path('list/', views.reh_list, name='reh_list'),
]
rehabili/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('reh/', include('reh.urls')),
path('admin/', admin.site.urls),
]
Die folgende URL wird lebendig http://127.0.0.1:8000/reh/list/
Drehen Sie sich ein wenig zur Seite und machen Sie den Schaum normal. Diese Methode kann jedoch nicht in der Datenbank berücksichtigt werden.
reh/views.py
###P.S.
def formInit(request):
params = {
'title':'Hello World',
'msg':'Bitte geben Sie Ihren Namen ein',
}
return render(request,'reh/hello.html', params)
def formTest(request):
msg = request.POST['msg']
params = {
'title':'Hello World',
'msg':'hello '+msg+'!',
}
return render(request,'reh/hello.html', params)
reh/urls.py
from django.urls import path
from reh import views
app_name = 'reh'
urlpatterns = [
path('list/', views.reh_list, name='reh_list'),
path('formInit/', views.formInit, name='formInit'),
path('formTest/', views.formTest, name='formTest'),
]
reh/template/reh/hello.html
{% load static %}
<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>{{ title }}</title>
</head>
<body>
<h1>{{ title }}</h1>
<p>{{ msg }}</p>
<!--Geben Sie die Aktion wie normales HTML an-->
<form action="{% url 'reh:formTest' %}" method = "post">
{% csrf_token %} <!--CSRF-Maßnahmen-->
<label for = "msg">Gib etwas hinein</label>
<input id = "msg" type="text" name ="msg">
<input type="submit" value="input">
</form>
</body>
</html>
Es funktioniert normalerweise nur im Browser. Verwenden Sie die Klassen forms.py und Form von Django, da dies nicht in der Datenbank angezeigt werden kann. Schreiben Sie nur den Differenzteil.
reh/views.py
from .forms import formInitForm
def formInit(request):
# params = {
# 'title':'Hello World',
# 'msg':'Bitte geben Sie Ihren Namen ein',
# }
# return render(request,'reh/hello.html', params)
params = {
'title':'Hello World',
'msg':'Bitte geben Sie Ihren Namen ein',
'form': formInitForm(),
}
if (request.method=='POST'):
params['msg'] = 'Hallo!'+request.POST['name']+'Herr.!<br>'+request.POST['area']+'Lebe in<br>Alter ist'+request.POST['age']+'ich bin alt!<br>Vielen Dank.'
params['form']= formInitForm(request.POST)
return render(request,'reh/hello.html', params)
# def formTest(request):
# msg = request.POST['msg']
# params = {
# 'title':'Hello World',
# 'msg':'hello '+msg+'!',
# }
# return render(request,'reh/hello.html', params)
reh/urls.py
path('formInit/', views.formInit, name='formInit'),
# path('formTest/', views.formTest, name='formTest'),
Selbst wenn Sie in der Vorlage einen Kommentar abgeben, wird die darin enthaltene Python ausgeführt. Überprüfen Sie daher die Unterschiede selbst.
reh/template/reh/hello.html
{% load static %}
<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>{{ title }}</title>
</head>
<body>
<h1>{{ title }}</h1>
<p>{{msg|safe}}</p>
<form action= "{% url 'reh:formInit' %}" method = "post">
{% csrf_token %}
<ul>
{{form.as_ul}} <!--Hier sind Formulare.py item-->
</ul>
<input type="submit" value="input">
</form>
</body>
</html>
CRUD/ create, read, update, delete Gehen wir jetzt von der Seitenstraße zurück, damit wir sie ändern, löschen und aus der Liste hinzufügen können. Erstellen Sie zunächst eine Liste.
Ich werde einige HTML-Vorlagen erstellen, damit ich eine Basis erstellen kann. Ich denke, CSS angemessen.
reh/template/reh/base.html
{% load i18n static %}
<!DOCTYPE html>{% get_current_language as LANGUAGE_CODE %}
<html lang="{{ LANGUAGE_CODE|default:'en-us' }}">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<style>
h4{
font-size: 20px;
display: inline-block;
margin-right: 30px;
}
.container{
width: 100%;
max-width: 800px;
margin: 60px auto;
}
.btn{
text-decoration: none;
padding: 5px 10px;
border: 1px solid #ccc;
border-radius: 5px;
}
button.btn{
font-size: 16px;
display: inline-block;
line-height: 1;
}
th,td{
min-width: 100px;
text-align: center;
}
table{
border-collapse:collapse;
margin:0 auto;
}
th{
color:#005ab3;
min-width: 120px;
}
td{
border-bottom:1px dashed #999;
}
th,tr:last-child td{
border-bottom:2px solid #005ab3;
}
td,th{
padding:10px;
}
form input{
padding: 5px;
font-size: 20px;
margin-bottom: 20px;
}
form label{
padding: 5px;
font-size: 20px;
margin-bottom: 20px;
min-width: 90px;
display: inline-block;
}
.flex{
display: flex;
}
</style>
{% block extra_css %}{% endblock %}
<title>{% block title %}My rehs{% endblock %}</title>
</head>
<body>
<div class="container">
{% block content %}
{{ content }}
{% endblock %}
</div>
{% block extra_js %}{% endblock %}
</body>
</html>
reh/template/reh/reh_list.html
{% extends "reh/base.html" %}
{% block title %}Aufführen{% endblock title %}
{% block content %}
<h4>Aufführen</h4>
<table class="table table-striped table-bordered">
<thead>
<tr>
<th scope="col">ID</th>
<th scope="col">NAME</th>
<th scope="col">FROM</th>
<th scope="col">LENGTH</th>
</tr>
</thead>
<tbody>
{% for reh in rehs %} <!-- ① -->
<tr>
<th scope="row">{{ reh.id }}</th>
<td>{{ reh.postname }}</td>
<td>{{ reh.postfrom }}</td>
<td>{{ reh.postlength }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock content %}
① Da die Liste im Teil von {% für reh in rehs%} gelesen wird, ändern Sie views.py.
reh/views.py
def reh_list(request):
# return HttpResponse('Aufführen')
#
rehs = SamplePost.objects.all().order_by('id')
#
return render(request, 'reh/reh_list.html', {'rehs': rehs})
reh/template/reh/reh_list.html
{% extends "reh/base.html" %}
{% block title %}{% endblock title %}
{% block content %}
<h4></h4>
<!--Da Sie ein Wörterbuch in das dritte Argument der Rendermethode einfügen können, setzen Sie rehs mit dem oben angegebenen Namen rehs. Sie sollten die Liste jetzt unter http: // localhost: 8000 / reh / list / sehen. Erstellen Sie dann eine Schaltfläche zum Hinzufügen. Liste Liste Hier hinzufügen-->
<a href="{% url 'reh:reh_add' %}" class="btn">hinzufügen</a>
<table class="table table-striped table-bordered">
<thead>
<tr>
<th scope="col">ID</th>
<th scope="col">NAME</th>
<th scope="col">FROM</th>
<th scope="col">LENGTH</th>
</tr>
</thead>
<tbody>
{% for reh in rehs %} <!-- ① -->
<tr>
<th scope="row">{{ reh.id }}</th>
<td>{{ reh.postname }}</td>
<td>{{ reh.postfrom }}</td>
<td>{{ reh.postlength }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock content %}
{% url'reh: reh_add '%} Füge reh_add zu urls.py hinzu. Fügen Sie eine Ansicht mit dem Namen reh_edit hinzu. Rufen Sie reh_edit in views.py auf.
reh/urls.py
path('list/add/', views.reh_edit, name='reh_add'),
reh/views.py
def reh_edit(request, reh_id=None):
reh_temp = SamplePost()
if request.method == 'POST':
#Verarbeitung beim POSTEN eines Formulars auf einer zusätzlichen Seite
form = SamplePostForm(request.POST, instance=reh_temp)
#Validierung des POST-Formulars
if form.is_valid():
reh_temp = form.save(commit=False)
reh_temp.save()
#Wenn das Formular gespeichert ist, kehrt es zur Liste zurück.
return redirect('reh:reh_list')
else: #Wird hier angezeigt, wenn Sie zum Zeitpunkt von GET auf die Schaltfläche Hinzufügen aus der Liste klicken
#Erstellen Sie ein Formular aus einer SamplePost-Instanz
form = SamplePostForm(instance=reh_temp)
#Form und Reh im Wörterbuch_id=Geben Sie Keine ein und verwenden Sie die Rendermethode, um die Seite zum Bearbeiten zu wechseln.
return render(request, 'reh/reh_edit.html', dict(form=form, reh_id=reh_id))
Erstellen Sie ein Modell des obigen Formulars in forms.py.
reh/forms.py
from django.forms import ModelForm
from reh.models import SamplePost
class SamplePostForm(ModelForm):
#Wenn Sie die bereits in SamplePost definierten Eigenschaften verwenden möchten, verwenden Sie die Meta-Klasse.
class Meta:
model = SamplePost
#Wenn Sie nur einige Eigenschaften des Modells verwenden, entweder explizit
fields = ('postname', 'postfrom', 'postlength', )
Erstellen Sie eine Seitenvorlage zum Bearbeiten.
reh/template/reh/reh_edit.html
{% extends "reh/base.html" %}
{% block title %}Titel{% endblock title %}
{% block content %}
<!--Stellen Sie als Formularaktion den Wert des Formulars wieder her_Zur Bearbeitungsansicht senden-->
<form action="{% url 'reh:reh_add' %}" method="post">
{% csrf_token %}
#Formulare später beschrieben.Rufen Sie py an
{{ form.as_ul }}
<div>
<button type="submit" class="btn">Senden</button>
</div>
</form>
<a href="{% url 'reh:reh_list' %}" class="btn">Rückkehr</a>
{% endblock content %}
Als nächstes ein einfaches Löschen (einfach, weil es plötzlich auf dem Bestätigungsbildschirm verschwindet)
Holen Sie sich die reh_id und löschen Sie sie.
Fügen Sie der Vorlage eine Schaltfläche hinzu und springen Sie zur nächsten Ansicht mit der ID.
reh/template/reh/reh_list.html
{% extends "reh/base.html" %}
{% block title %}Aufführen{% endblock title %}
{% block content %}
<h4>Aufführen</h4>
<!--Hier hinzufügen-->
<a href="{% url 'reh:reh_add' %}" class="btn">hinzufügen</a>
<table class="table table-striped table-bordered">
<thead>
<tr>
<th scope="col">ID</th>
<th scope="col">NAME</th>
<th scope="col">FROM</th>
<th scope="col">LENGTH</th>
<th scope="col">Operation</th>
</tr>
</thead>
<tbody>
{% for reh in rehs %} <!-- ① -->
<tr>
<th scope="row">{{ reh.id }}</th>
<td>{{ reh.postname }}</td>
<td>{{ reh.postfrom }}</td>
<td>{{ reh.postlength }}</td>
<td>
<!--Reh zum Link-Ziel des a-Tags_Machen Sie eine Del-Ansicht und fügen Sie dem Argument eine ID hinzu-->
<a href="{% url 'reh:reh_del' reh_id=reh.id %}" class="btn">Löschen</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock content %}
reh/views.py
def reh_del(request, reh_id):
#Wenn es eine Instanz mit der angegebenen ID gibt, wird diese angegeben, andernfalls 404(django.http.Http404)Anruf,
#Dann löschen und zur Liste umleiten.
reh = get_object_or_404(SamplePost, pk=reh_id)
reh.delete()
return redirect('reh:reh_list')
Dies ist die URL.
reh/urls.py
path('list/del/<int:reh_id>/', views.reh_del, name='reh_del'),
Zum Schluss die Fix-Schaltfläche. Fügen wir der Listenseite eine Schaltfläche hinzu.
reh/template/reh/reh_list.html
{% extends "reh/base.html" %}
{% block title %}Aufführen{% endblock title %}
{% block content %}
<h4>Aufführen</h4>
<!--Hier hinzufügen-->
<a href="{% url 'reh:reh_add' %}" class="btn">hinzufügen</a>
<table class="table table-striped table-bordered">
<thead>
<tr>
<th scope="col">ID</th>
<th scope="col">NAME</th>
<th scope="col">FROM</th>
<th scope="col">LENGTH</th>
<th scope="col">Operation</th>
</tr>
</thead>
<tbody>
{% for reh in rehs %} <!-- ① -->
<tr>
<th scope="row">{{ reh.id }}</th>
<td>{{ reh.postname }}</td>
<td>{{ reh.postfrom }}</td>
<td>{{ reh.postlength }}</td>
<td>
<!--Schaltfläche "Änderung hinzufügen" Dies hat auch die ID als Argument. Verwenden Sie zum Hinzufügen dieselbe Ansicht.-->
<a href="{% url 'reh:reh_mod' reh_id=reh.id %}" class="btn ">Fix</a>
<a href="{% url 'reh:reh_del' reh_id=reh.id %}" class="btn">Löschen</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock content %}
Ändern Sie reh_edit in views.py.
reh/views.py
def reh_edit(request, reh_id=None):
#Der Fall der Addition und der Fall ist, ob id als Argument erforderlich ist, verwenden Sie es also
#reh_Ob temp einen Wert hat oder nicht, ist der gleiche Vorgang wie das Hinzufügen
if reh_id:
#Verarbeitung bei Korrekturen. Instanz ist ein vorhandener Wert
reh_temp = get_object_or_404(SamplePost, pk=reh_id)
else:
#Verarbeitung, wenn dies neu hinzugefügt wird. Instanz ist Standard
reh_temp = SamplePost()
if request.method == 'POST':
form = SamplePostForm(request.POST, instance=reh_temp)
if form.is_valid():
reh_temp = form.save(commit=False)
reh_temp.save()
return redirect('reh:reh_list')
else:
form = SamplePostForm(instance=reh_temp)
return render(request, 'reh/reh_edit.html', dict(form=form, reh_id=reh_id))
reh/urls.py
path('list/mod/<int:reh_id>/', views.reh_edit, name='reh_mod'),
Die Seitenvorlage zum Bearbeiten kann geändert und hinzugefügt werden.
reh/template/reh/reh_edit.html
{% extends "reh/base.html" %}
{% block title %}Titel{% endblock title %}
{% block content %}
<!-- views.Wie py, reh_Beurteilen Sie anhand der Anwesenheit oder Abwesenheit von ID-->
{% if reh_id %}
<form action="{% url 'reh:reh_mod' reh_id=reh_id %}" method="post">
{% else %}
<form action="{% url 'reh:reh_add' %}" method="post">
{% endif %}
{% csrf_token %}
<ul>
{{ form.as_ul }}
</ul>
<div class="flex">
<button type="submit" class="btn">Senden</button>
<a href="{% url 'reh:reh_list' %}" class="btn">Rückkehr</a>
</div>
</form>
{% endblock content %}
Ich denke, Sie haben so etwas wie das Folgende geschaffen.
Recommended Posts