ゆーじぇいブログ

ゆーじぇいブログ

プログラミングとか色々

[Django]PokeAPIを使ってピカチュウのデータを取ってみる[ポケモン]

f:id:jyouj:20181202201322p:plain

PokeAPIというというのを見つけたので、Djangoピカチュウのデータだけを取得しようかと思います。ポケモン好きな人はぜひ使ってみてください。

pokeapi.co

コードも置いとくので、よかったらみといてください。

github.com

パッケージを導入

pokebaseというPython用のライブラリがあったので、それを導入します。

$ pip install pokebase

settings.pyのInstalled_appにpokebaseを追加しておきましょう。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'pokebase',

    'pokemon',
]

ピカチュウのデータを取る

それではピカチュウのデータを取っていきましょう。

views.pyに処理を書きましょう。そんなに難しくはないですね。

from django.shortcuts import render
import pokebase as pb
from django.views import generic

# Create your views here.
class IndexView(generic.TemplateView):
    template_name = 'pokemon/index.html'

    def get_context_data(self, **kwargs):
        context = super(IndexView, self).get_context_data(**kwargs)
        pikachu = pb.pokemon(25)
        print(pikachu)
        context['pikachu'] = pikachu
        return context

print(pikachu)でデータが取得できているか確認してみます。

それでは、ピカチュウのデータを表示するテンプレートを作っていきましょう。

{% extends 'base.html' %}

{% load static %}

{% block body %}
<section class="hero is-warning">
  <div class="hero-body">
    <div class="container">
      <h1 class="title">
        ピカチュウ
      </h1>
      <h2 class="subtitle">
        {{ pikachu.name }}
      </h2>
    </div>
  </div>
</section>

<div class="columns">
  <div class="column is-3">
    <img class="image is-128x128" src="{{ pikachu.sprites.front_default }}">
  </div>
  <div class="column is-3">
    <img class="image is-128x128" src="{{ pikachu.sprites.front_shiny }}">
  </div>
  <div class="column is-3">
    <img class="image is-128x128" src="{{ pikachu.sprites.front_female }}">
  </div>
  <div class="column is-3">
    <img class="image is-128x128" src="{{ pikachu.sprites.back_default }}">
  </div>
</div>

<nav class="level">
  <div class="level-item has-text-centered">
    <div>
      <p class="heading">高さ</p>
      <p class="title">{{ pikachu.height }}</p>
    </div>
  </div>
  <div class="level-item has-text-centered">
    <div>
      <p class="heading">経験値</p>
      <p class="title">{{ pikachu.base_experience }}</p>
    </div>
  </div>
  <div class="level-item has-text-centered">
    <div>
      <p class="heading">重さ</p>
      <p class="title">{{ pikachu.weight }}</p>
    </div>
  </div>
  <div class="level-item has-text-centered">
    <div>
      <p class="heading">図鑑番号</p>
      <p class="title">{{ pikachu.id }}</p>
    </div>
  </div>
</nav>
{% endblock %}

こんなサイトが出来上がります!PokeAPI楽しいですね。

f:id:jyouj:20181202203209p:plain

何かあれば、じぇい👨‍💻 (@jyouj__) | Twitterに!

「ガチャっとニュース」リンク集

f:id:jyouj:20181201223623p:plain

先日、ニュースをランダムにガチャして読める「ガチャっとニュース」をリリースしました。

ガチャっとニュース −ニュースをガチャっとランダムに!

リリースツイートはこちらです。

さて、このブログはリンク集というタイトルなので、ガチャっとニュースについての掲載メディアのリンクを貼ろうかなーと思います。


qiita.com


jyouj.qrunch.io


crieit.net


seekups.seekgeeks.net

随時更新いたします!!

[Django]Twitter Cardに表示するコンテンツやURLをページごとに変える

f:id:jyouj:20181124164719j:plain

ツイッターで共有するのはもはや必須の時代となりました。そこでTwitter Cardに表示する内容をDjangoでページごとに変更してみようと思ったわけです。

結構簡単にできるので見てみてください。

通常のTwitter Card

URLに変数が含まれていないページではheadタグの中にこう記述します。

    {% block meta %}
    <meta name="twitter:card" content="summary">
    <meta name="twitter:site" content="<アカウント名>">
    <meta name="og:url" content="<url>">
    <meta name="og:title" content="<title>">
    <meta name="og:description" content="<説明>">
    <meta name="og:image" content="<画像取得>">
    {% endblock %}

ページごとに変わる場合

簡単ですね。Djangoのテンプレートに渡す変数のタグを使えばOK

{% block meta %}
<meta name="twitter:card" content="summary">
<meta name="twitter:site" content="<アカウント名>">
<meta name="og:url" content="https://<url>/{{ post.id }}/">
<meta name="og:title" content="{{ post.post_title }}">
<meta name="og:description" content="{{ post.text}}">
<meta name="og:image" content="<画像取得>">
{% endblock %}

Twitter Card Validatorで表示されていたらOKです。変更にはタイムラグがあるかも。


https://cards-dev.twitter.com/validator

何かあれば、じぇい👨‍💻 (@jyouj__) | Twitterに!

[Bulma]モーダルウィンドウを実装する

f:id:jyouj:20181201153111p:plain

Bulmaフレームワークを使ってモーダルウィンドウを実装してみたいと思います。ただ、Bulmaは純粋なCSSフレームワークのため、JavaScriptを使わなくてはなりません。

このサイトを参考に、自分に必要なところを付け足しました。

hawksnowlog.blogspot.com

Bulmaでモーダルウィンドウのレイアウト

<div>
  <div>
    <center>
      <button class="button is-large" id="open">表示</button>
    </center>
  </div>

  <div class="modal">
    <div class="modal-background"></div>
      <div class="modal-card">
        <header class="modal-card-head">
          <p class="modal-card-title">モーダルウィンドウ</p>
          <button class="delete" aria-label="close" id="close"></button>
        </header>
        <section class="modal-card-body">
          <p class="image is-3by2">
            <img src="<画像URL>" alt="">
          </p>
          コンテンツ欄
        </section>
        <footer class="modal-card-foot">
          <button class="button is-success"><a href=#>リンク</a></button>
        </footer>
      </div>
    </div>
  </div>
</div>

ボタンを押したらモーダルウィンドウが表示されるようになってます。まだJavaScriptを入れてないので、最初から表示されていると思います。画像などもモーダルウィンドウで表示されるようにしました。実際に「 ガチャっとニュース −ニュースをガチャっとランダムに!」で取り入れてます。

jQueryで動作をつける

実際にボタンを押したら、モーダルウィンドウが表示されたり、バツボタンや背景をタップしたら、閉じるようにしましょう。

まず、jQueryを導入します。

<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>

そして動きを作っていきます。

<script>
  $(document).ready(function() {
    $("#open").on("click", function() {
      $("div.modal").addClass("is-active");
    })

    $("#close, div.modal-background").on("click", function() {
      $("div.modal").removeClass("is-active");
    })
  });
</script>

これでモーダルウィンドウがうまく表示されるようになりました!

何かあれば、じぇい👨‍💻 (@jyouj__) | Twitterに!

投げ銭も待ってまーす!-> jyouj__さんの投げ銭ビスケット募集中!

[Heroku][Django]httpsなのに「このサイトは保護されていません」と出る問題を解決!

f:id:jyouj:20181125181456p:plain

Herokuは簡単にデプロイできて、SSL証明もデフォルトで発行されるのですが、サイトをクロームなどで見たとき、「保護された通信」ではなく下のようなものが表示される時もあるでしょう。

f:id:jyouj:20181130230414p:plain

嫌ですよね。もしかしたら、サイトを離れてしまうかもしれません。

今回はDjangoでデプロイしたサイトで「このサイトは保護されていません」という表示から「保護された通信」に変更する方法を紹介します。

実はかなり簡単なのです(笑)

settings.pyのALLOWED_HOSTを='*'ではなく、

ALLOWED_HOSTS = ['<app-name>.herokuapp.com']

このように*でなんでもではなく、指定してあげればOKです。

Herokuで独自ドメインを設定したけど、SSL証明が得られないのも大抵はこの問題ですね。

何かあれば、じぇい👨‍💻 (@jyouj__) | Twitterに!