C'est un Mac.
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
python:rehabili/python:setting.py
# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'ja'
# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Tokyo'
Ouvrez http://127.0.0.1:8000/ ou http: // localhost: 8000 / avec un navigateur et réussissez si la fusée sort
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', #Ajoutez le nom de l'application créée ici
]
Connectez-vous avec le super utilisateur que vous avez créé précédemment http://localhost:8000/admin/
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)
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/
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>
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>
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.
Recommended Posts