[PYTHON] Django Shoho

C'est un Mac.

environnement

Créez un environnement avec venv et installez 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> Fin 2019, django est la série version 3. Si vous l'installez sans rien faire, cela se produira et vous ne pourrez peut-être pas vous connecter à l'administrateur, il est donc sûr d'utiliser le système 2.

J'irai ci-dessous. environmentName = reh projectName = rehabili applicationName = reha

Modifiez les préférences de Django dans settings.py.

python:rehabili/python:setting.py


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

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

### Créer dans la base de données `python manage.py migrate`
### Ajouter un super utilisateur `python manage.py createsuperuser` Suivez les instructions appropriées.
### Démarrer le serveur de développement `python manage.py runserver`

Ouvrez http://127.0.0.1:8000/ ou http: // localhost: 8000 / avec un navigateur et réussissez si la fusée sort


### Créer un modèle

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

Ajouté à l'écran de gestion

reh/admin.py


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

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

Ajouter une application

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', #Ajoutez le nom de l'application créée ici
]

Pré-processus à ajouter à la base de données avec makemigratoins. Vous n'avez pas besoin d'avoir le dernier nom de l'application, mais il s'allongera probablement à mesure que le projet se développera. `python manage.py makemigrations reh`
Ajouter à la base de données `python manage.py migrate`

Connectez-vous à l'écran de gestion

Connectez-vous avec le super utilisateur que vous avez créé précédemment http://localhost:8000/admin/ Screen Shot 2019-12-31 at 13.51.38.png

Écran de gestion fixe

Je l'ai mentionné ici. Les éléments qui peuvent être modifiés augmenteront à partir de la liste sur l'écran de gestion. 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',)  #Articles que vous souhaitez lister
    list_display_links = ('id', 'postname',)  #Éléments sur lesquels il est possible de cliquer avec le lien de correction

admin.site.register(SamplePost, SamplePostAdmin)


class SamplePost2Admin(admin.ModelAdmin):
    list_display = ('id', 'comment',)
    list_display_links = ('id', 'comment',)
    raw_id_fields = ('postname2',)   #Ne tirez pas sur la clé externe (empêche l'expiration du délai lorsque le nombre de données augmente)

admin.site.register(SamplePost2, SamplePost2Admin)

Conception de schéma d'URL

Créez urls.py dans le dossier de vos applications et incluez-le à partir des urls.py de votre projet.

reh/views.py


from django.shortcuts import render
from django.http import HttpResponse


def reh_list(request):
    return HttpResponse('liste de répétition')

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),
]

L'URL suivante prendra vie http://127.0.0.1:8000/reh/list/

Faire un formulaire

Tournez un peu sur le côté et faites la mousse normalement. Cependant, cette méthode ne peut pas être reflétée dans le DB.

reh/views.py



###P.S
def formInit(request):
    params = {
        'title':'Hello World',
        'msg':'S'il vous plaît entrez votre nom',
    }
    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>
        <!--Spécifiez l'action comme du HTML normal-->
        <form action="{% url 'reh:formTest' %}" method = "post"> 
            {% csrf_token %} <!--Mesures CSRF-->
            <label for = "msg">Mettez quelque chose dedans</label>
            <input id = "msg" type="text" name ="msg">
            <input type="submit" value="input">
        </form>
    </body>
</html>

dddd.jpg

Cela ne fonctionne normalement que sur le navigateur. Comme il ne peut pas être reflété dans la base de données tel quel, utilisez les classes forms.py et Form de Django. N'écrivez que la partie différence.

reh/views.py


from .forms import formInitForm

def formInit(request):
    # params = {
    #     'title':'Hello World',
    #     'msg':'S'il vous plaît entrez votre nom',
    # }
    # return render(request,'reh/hello.html', params)

    params = {
        'title':'Hello World',
        'msg':'S'il vous plaît entrez votre nom',
        'form': formInitForm(),
    }
    if (request.method=='POST'):
        params['msg'] = 'Bonjour!'+request.POST['name']+'M.!<br>'+request.POST['area']+'Vivre dans<br>L'âge est'+request.POST['age']+'je suis vieux!<br>Je vous remercie.'
        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'),

Même si vous commentez dans le modèle, le python à l'intérieur sera exécuté, veuillez donc vérifier les différences vous-même.

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}} <!--Voici les formulaires.article py-->    
            </ul>
            <input type="submit" value="input"> 
        </form>

    </body>
</html>

aaa.jpg

CRUD/ create, read, update, delete Maintenant, revenons de la rue latérale pour pouvoir modifier, supprimer et ajouter de la liste. D'abord, faites une liste.

Je vais créer un modèle html, donc je vais créer une base. Je suppose que css de manière appropriée.

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 %}liste{% endblock title %}

{% block content %}
    <h4>liste</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 %}

① Puisque la liste est lue dans la partie de {% for reh in rehs%}, modifiez views.py.

reh/views.py


def reh_list(request):
#    return HttpResponse('liste')

    #Ici, mettez tous les SamplePosts dans l'ordre des identifiants et stockez-les dans des rehs.
    rehs = SamplePost.objects.all().order_by('id')

    #Puisque vous pouvez mettre un dictionnaire dans le troisième argument de la méthode de rendu, mettez rehs avec le nom rehs apporté ci-dessus.
    return render(request, 'reh/reh_list.html', {'rehs': rehs})

Vous devriez maintenant voir la liste sur http: // localhost: 8000 / reh / list /.

Créez ensuite un bouton d'ajout.

reh/template/reh/reh_list.html


{% extends "reh/base.html" %}

{% block title %}liste{% endblock title %}

{% block content %}
    <h4>liste</h4>
    <!--Ajouter ici-->
    <a href="{% url 'reh:reh_add' %}" class="btn">ajouter à</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 '%} Ajoutez reh_add à urls.py. Ajoutez une vue appelée reh_edit. Appelez reh_edit dans views.py.

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':
        #Traitement lors de la POST d'un formulaire sur une page supplémentaire
        form = SamplePostForm(request.POST, instance=reh_temp)
        #Validation du formulaire POSTÉ
        if form.is_valid():
            reh_temp = form.save(commit=False)
            reh_temp.save()
            #Lorsque le formulaire est enregistré, il revient à la liste.
            return redirect('reh:reh_list')

    else: #Afficher ici lorsque vous appuyez sur le bouton d'ajout de la liste au moment de GET
        #Créer un formulaire à partir d'une instance SamplePost
        form = SamplePostForm(instance=reh_temp)

    #Form and reh dans le dictionnaire_id=Entrez Aucun et utilisez la méthode de rendu pour effectuer la transition de la page pour l'édition.
    return render(request, 'reh/reh_edit.html', dict(form=form, reh_id=reh_id))

Créez un modèle du formulaire ci-dessus dans forms.py.

reh/forms.py


from django.forms import ModelForm
from reh.models import SamplePost

class SamplePostForm(ModelForm):
    #Si vous souhaitez utiliser les propriétés déjà définies dans SamplePost, utilisez la classe Meta.
    class Meta:
        model = SamplePost
        #Lorsque vous n'utilisez que certaines propriétés du modèle, soit explicitement
        fields = ('postname', 'postfrom', 'postlength', )

Créez un modèle de page à modifier.

reh/template/reh/reh_edit.html


{% extends "reh/base.html" %}

{% block title %}Titre{% endblock title %}

{% block content %}
  <!--En tant qu'action de forme, reh la valeur de la forme_Envoyer pour modifier la vue-->
  <form action="{% url 'reh:reh_add' %}" method="post">      
    {% csrf_token %}
    #Formulaires décrits plus loin.Appeler py
    {{ form.as_ul }}
    <div>
      <button type="submit" class="btn">Envoyer</button>
    </div>
  </form>
  <a href="{% url 'reh:reh_list' %}" class="btn">Revenir</a>
{% endblock content %}

Ensuite, effectuez une simple suppression (facile car elle disparaît soudainement sur l'écran de confirmation)

Obtenez le reh_id et effacez-le.

Ajoutez un bouton au modèle et passez à la vue suivante avec l'identifiant.

reh/template/reh/reh_list.html


{% extends "reh/base.html" %}

{% block title %}liste{% endblock title %}

{% block content %}
    <h4>liste</h4>
    <!--Ajouter ici-->
    <a href="{% url 'reh:reh_add' %}" class="btn">ajouter à</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">opération</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 à la destination du lien de la balise a_Faire une vue et ajouter un ID à l'argument-->
            <a href="{% url 'reh:reh_del' reh_id=reh.id %}" class="btn">Effacer</a>
          </td>
        </tr>
        {% endfor %}
      </tbody>
    </table>
{% endblock content %}

reh/views.py



def reh_del(request, reh_id):
    #S'il existe une instance avec l'ID spécifié, elle sera spécifiée, sinon 404(django.http.Http404)appel,
    #Puis supprimez et redirigez vers la liste.
    reh = get_object_or_404(SamplePost, pk=reh_id)
    reh.delete()
    return redirect('reh:reh_list')

Ceci est l'URL.

reh/urls.py


path('list/del/<int:reh_id>/', views.reh_del, name='reh_del'),

Enfin, le bouton de correction. Ajoutons un bouton à la page de liste.

reh/template/reh/reh_list.html


{% extends "reh/base.html" %}

{% block title %}liste{% endblock title %}

{% block content %}
    <h4>liste</h4>
    <!--Ajouter ici-->
    <a href="{% url 'reh:reh_add' %}" class="btn">ajouter à</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">opération</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>
            <!--Ajouter un bouton de modification Il a également id comme argument. Utilisez la même vue pour ajouter.-->
            <a href="{% url 'reh:reh_mod' reh_id=reh.id %}" class="btn ">Réparer</a>
            <a href="{% url 'reh:reh_del' reh_id=reh.id %}" class="btn">Effacer</a>
          </td>
        </tr>
        {% endfor %}
      </tbody>
    </table>
{% endblock content %}

Modifiez reh_edit dans views.py.

reh/views.py


def reh_edit(request, reh_id=None):
    #Le cas de l'addition et le cas est de savoir si id est requis comme argument, alors utilisez-le
    #reh_Que temp ait une valeur ou non équivaut à ajouter
    if reh_id:
        #Traitement lors des corrections. L'instance est une valeur existante
        reh_temp = get_object_or_404(SamplePost, pk=reh_id)
    else:
        #Traitement lorsque cela est nouvellement ajouté. L'instance est la valeur par défaut
        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'),

Le modèle de page pour l'édition peut être modifié et ajouté.

reh/template/reh/reh_edit.html


{% extends "reh/base.html" %}

{% block title %}Titre{% endblock title %}

{% block content %}
    <!-- views.Comme py, reh_Juger par la présence ou l'absence d'identité-->
    {% 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">Envoyer</button>
          <a href="{% url 'reh:reh_list' %}" class="btn">Revenir</a>
      </div>
    </form>
{% endblock content %}

Je pense que vous avez créé quelque chose comme ce qui suit. Screen Shot 2020-01-02 at 16.52.02.png

Screen Shot 2020-01-02 at 16.52.12.png

Recommended Posts

Django Shoho
mise à jour de Django
Django Note 4
Mémorandum Django
recherche django
Installation de Django
Résumé de Django
Test Django
Django # 2 (modèle)
Django Hands On
Touchez django
Mémo Django
Résumé de Django
Les bases de Django
Paramètres initiaux de Django
Django + Docker
Glossaire Django
Installation de Django
Django: Références
Django Note 1
Django Note 3
Django Note 2
Démarrage de Django
Mémo Django
Django NullCharField
Construction de l'environnement Django
Django ~ édition settings.py ~
Django Heroku Deploy 1
Modèle HTML Django partie 2
Formulaire de demande Django 2
Django a commencé la partie 1
Modèle Django: ManyToManyField
Qu'est-ce que Django? .. ..
Modèle dans Django
Vue basée sur les fonctions Django
Tutoriel Python Django (5)
Tutoriel Python Django (2)
Notes de [Django] as_view ()
Premier défi Django
django makemigarations créeuperutilisateur
Sites liés à Django
Internationalisation avec Django
Vérification de la version de Django
création de table django
Django a commencé la partie 4
Prise en charge de l'internationalisation avec Django 1.9
CentOS8 --Jouer --Django
CentOS8 --Installer --Django
[Django] Refaire la migration
construction d'environnement django
Tutoriel Python Django (8)
Tutoriel Python Django (6)
Configuration initiale de django
Démarrer le didacticiel Django 1
Modèle HTML Django
Astuces pour les modèles Django
Flux de travail Django Girls-3
Référence du projet Django
Django Heroku Deploy 2