login.htmlを作成する
作成場所はtemplates直下

migrations>urls.pyの編集
from django.urls import path
from .views import signupfunc, loginfunc
urlpatterns = [
path('signup/', signupfunc ,name='signup'),
path('login/', loginfunc , name='login'),
]
migrations>views.pyの編集
from django.shortcuts import render
from django.contrib.auth.models import User
from django.contrib.auth import authenticate, login
from django.shortcuts import redirect
# Create your views here.
def signupfunc(request):
if request.method =='POST':
username2 = request.POST['username']
password2 = request.POST['password']
try:
User.objects.get(username=username2)
return render(request, 'signup.html', {'error':'このユーザーは登録されています'})
except:
user = User.objects.create_user(username, '', password2)
return render(request, 'signup.html', {'some':100})
return render(request, 'signup.html', {'some':100})
def loginfunc(request):
if request.method =='POST':
username2 = request.POST['username']
password2 = request.POST['password']
user = authenticate(request, username=username2, password=password2)
if user is not None:
login(request, user)
return redirect('signup')
else:
return redirect('login')
return render(request, 'login.html')
login.htmlの中身を作成する
ほぼsignup.htmlと同樣に作っていく
{% extends 'base.html' %}
{% block content %}
<form class="form-signin" method="POST" action=''>{% csrf_token %}
<img class="mb-4" src="/docs/4.5/assets/brand/bootstrap-solid.svg" alt="" width="72" height="72">
<h1 class="h3 mb-3 font-weight-normal">Please login</h1>
<label for="inputEmail" class="sr-only">Email address</label>
<input type="text" id="inputEmail" class="form-control" name='username' placeholder="username" required autofocus>
<label for="inputPassword" class="sr-only">Password</label>
<input type="password" id="inputPassword" class="form-control" name='password' placeholder="Password" required>
<div class="checkbox mb-3">
</div>
<button class="btn btn-lg btn-primary btn-block" type="submit">login</button>
<p class="mt-5 mb-3 text-muted">© 2017-2020</p>
</form>
{% endblock content %}
ところでredirectとrenderの違いとは?
redirectは指定のページへダイレクトに飛んでいく
→ページのリクエストをurls.pyを介してリクエストする
renderは指定のページにジャンプせずに、次の処理を行う
list.htmlを作成する

bootstrapで見た目を整える
{% extends 'base.html' %}
{% block customecss %}
{% endblock customecss %}
{% block header %}
<div class="alert alert-primary" role="alert">
社内SNS
</div>
{% endblock header %}
{% block content %}
<div class='container'>
<div class="alert alert-success" role="alert">
<p>タイトル:</p>
<p>投稿者:</p>
<a href="#" class="btn btn-primary btn-lg active" role="button" aria-pressed="true">Primary link</a>
<a href="#" class="btn btn-secondary btn-lg active" role="button" aria-pressed="true">Link</a>
</div>
</div>
{% endblock content %}
migrations>urls.pyのつなぎこみをする
from django.urls import path
from .views import signupfunc, loginfunc, listfunc
urlpatterns = [
path('signup/', signupfunc, name='signup'),
path('login/', loginfunc, name='login'),
path('list/', listfunc, name='list'),
]
migrations>views.pyのつなぎこみをする
from django.shortcuts import render
from django.contrib.auth.models import User
from django.contrib.auth import authenticate, login
from django.shortcuts import redirect
# Create your views here.
def signupfunc(request):
if request.method =='POST':
username2 = request.POST['username']
password2 = request.POST['password']
try:
User.objects.get(username=username2)
return render(request, 'signup.html', {'error':'このユーザーは登録されています'})
except:
user = User.objects.create_user(username, '', password2)
return render(request, 'signup.html', {'some':100})
return render(request, 'signup.html', {'some':100})
def loginfunc(request):
if request.method =='POST':
username2 = request.POST['username']
password2 = request.POST['password']
user = authenticate(request, username=username2, password=password2)
if user is not None:
login(request, user)
return redirect('signup')
else:
return redirect('login')
return render(request, 'login.html')
def listfunc(request):
return render(request, 'list.html')
models.pyの作り込み
from django.db import models
# Create your models here.
class BoardModel(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
author = models.CharField(max_length=100)
images = models.ImageField(upload_to='')
good = models.IntegerField()
read = models.IntegerField()
readtext = models.CharField(max_length=200)
このままだと、ImageFieldの保存先が無いので一度pillowをインストールする
sudo pip3 install pillow
Ubuntuのパスワードを聞かれるので、入力してpllowをインストールする
python3 manage.py makemigrations

するとmigrations下に 0001_initial.pyが出来る

またmigrateを実行する
python3 manage.py migrate

すると__pycache__下に0001.cpythonが出来る

これでよくわからんがテーブルの作成が完了した。
migrations>admin.pyにおまじない
from django.contrib import admin
from .models import BoardModel
# Register your models here.
admin.site.register(BoardModel)
でrunserberして/adminを見てみると
Boardmodelsという


という感じでデータの格納先が完成しました。
![]() |
![]() |
---|
コメントを残す