【django】社内SNSアプリを作ってみる④(loginviewの作り込み)【pythonメモ】

pythonLOGO

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という

http://127.0.0.1:8000/admin/

という感じでデータの格納先が完成しました。



 

あ、宜しければ・・・。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です