[PYTHON] Django Shoho

Es ist ein Mac.

Umgebung

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

Passen Sie die Einstellungen von Django in settings.py an.

python:rehabili/python:setting.py


# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'ja'

# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Tokyo'

### In Datenbank erstellen `python manage.py migrate`
### Superuser hinzufügen `python manage.py createsuperuser` Befolgen Sie die entsprechenden Anweisungen.
### Starten Sie den Entwicklungsserver `python manage.py runserver`

Öffnen Sie http://127.0.0.1:8000/ oder http: // localhost: 8000 / mit einem Browser und sind Sie erfolgreich, wenn die Rakete herauskommt


### Modell erstellen

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

Zum Verwaltungsbildschirm hinzugefügt

reh/admin.py


from django.contrib import admin
from reh.models import SamplePost, SamplePost2

admin.site.register(SamplePost)
admin.site.register(SamplePost2)

App hinzufügen

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
]

Vorverarbeitung zum Hinzufügen zur Datenbank mit Makemigratoins. Sie müssen nicht den letzten Anwendungsnamen haben, aber er wird wahrscheinlich länger, wenn das Projekt wächst. `python manage.py makemigrations reh`
Zur Datenbank hinzufügen `python manage.py migrate`

Melden Sie sich beim Verwaltungsbildschirm an

Melden Sie sich mit dem Superuser an, den Sie zuvor erstellt haben http://localhost:8000/admin/ Screen Shot 2019-12-31 at 13.51.38.png

Verwaltungsbildschirm behoben

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)

URL-Schema-Design

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/

Machen Sie ein Formular

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>

dddd.jpg

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>

aaa.jpg

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. Screen Shot 2020-01-02 at 16.52.02.png

Screen Shot 2020-01-02 at 16.52.12.png

Recommended Posts

Django Shoho
Django-Update
Django Note 4
Django Memorandum
Django-Suche
Django Installation
Django Zusammenfassung
Django-Test
Django # 2 (Vorlage)
Django zum Anfassen
Berühre Django
Django Memo
Django Zusammenfassung
Django Grundlagen
Django Grundeinstellungen
Django + Docker
Django Glossar
Django Installation
Django: Referenzen
Django Note 1
Django Note 3
Django Note 2
Django-Start
Django Memo
Django NullCharField
Django Umweltbau
Django ~ settings.py edition ~
Django Heroku Deploy 1
Django HTML Vorlage Teil 2
Django Anfrageformular 2
Django startete Teil 1
Django-Modell: ManyToManyField
Was ist Django? .. ..
Modell in Django
Django funktionsbasierte Ansicht
Python Django Tutorial (5)
Python Django Tutorial (2)
[Django] as_view () Notizen
Erste Django Challenge
Django Makemigarations schafft Superuser
Django verwandte Websites
Internationalisierung mit Django
Django Versionsprüfung
Django-Tabellenerstellung
Django startete Teil 4
Internationalisierungsunterstützung mit Django 1.9
CentOS8 --Play --Django
CentOS8 --Installieren - Django
[Django] Wiederholen Sie die Migration
Django Umweltbau
Python Django Tutorial (8)
Python Django Tutorial (6)
Grundeinstellung von Django
Starten Sie das Django Tutorial 1
Django HTML-Vorlage
Tipps für Django-Vorlagen
Django Girls-3 Workflow
Django-Projektbasislinie
Django Heroku Deploy 2