こなさんち

しがないフリーランスエンジニアの備忘録。

【代入、返り値編】python での特殊な書き方。@phper の驚き!

ほおーーー!!!!! って驚くこと書いてみた。

複数の値へ同時に代入。

初期化用かな。

 
>>> hoge ,fuga = (10, 100)
>>> hoge
10
>>> fuga
100

複数の返り値!!!

def multiReturn():
  return 10, 100, 1000

>>> a, b, c = multiReturn()
>>> a
10
>>> b
100
>>> c
1000

【比較演算子編】python での特殊な書き方。@phper の驚き!

ちょっと今日は2記事書いてみる。 元気があったら、fc2の通常日記も書くね。 ※ 精神薬等飲んだのでふわふわしてます。

PHPだと

if (hoge > 1 and hoge < 20 ) {
  echo '1より大きくて20より小さいよ';
}

Pythonだと

if 1 < hoge < 20:
  print u'PHPとおなじだよ!!!!!'

演算子はつなげることができ、解釈としては間に「and」が入るのですね。

a is b is c is None

# 解釈

a is b and b is c and c is None

TestCaseの使い方。 @django

最近Laravelではなく、pythondjangoに浮気しています。

import datetime

from django.utils import timezone
from django.test import TestCase

from .models import Question

class QuestionModelTests(TestCase):
  def hoge(self):
    self.assertIs(fuga, false)

これはね、assertIsでね、 fuga is false を判定するやつやねー。中々面白いよpython!

引用: 26.4. unittest — ユニットテストフレームワーク — Python 3.6.4 ドキュメント

faviconがsessionにいるせいで半日潰れた

■現象

hoge.com/[controller]/[action]/[parameter]

でGETパラメーターでアクセス。 入力フォームで登録情報を入力してもらうページ。

何も入力せずEnter。

リダイレクト先が

hoge.com/[controller]/[action]/favicon.ico

になってた。

■追求

validationを掛けているので、FormRequestを継承したrequestのphpファイルを

php artisan make:request CompanyRequest

みたいに作るのよ。

ははーん、validateが失敗したときのリダイレクト先が変なんだな??

これを機会にちょっとソースをほじくるぞ。

まず、 vender/laravel/framework/src/illuminate/Foundation/Http/FormRequest.php が元だね。こんなに階層潜るのか。

protected function failedValidation(Validator $validator)
    {
        throw (new ValidationException($validator))
                    ->errorBag($this->errorBag)
                    ->redirectTo($this->getRedirectUrl());
    }

はいはい、 getRedirectUrl() ね。。

protected function getRedirectUrl()
    {
        $url = $this->redirector->getUrlGenerator();
        
        if ($this->redirect) {
            return $url->to($this->redirect);
        } elseif ($this->redirectRoute) {
            return $url->route($this->redirectRoute);
        } elseif ($this->redirectAction) {
            return $url->action($this->redirectAction);
        }
        
        return $url->previous();
    }

...redirector ?????

vender/laravel/framework/src/illuminate/Routing/UrlGenerator.php

にいるね、うんうん。このクラスだね。

getPreviousUrlFromSession

ここらへんから怪しいよね、session???って。 都度都度dd()で吐き出してるけど、結局パラメータがfavicon.icoになってる。

■解決?

なんでfaviconがSessionにいるんだよおあああああああああああああああああああああああああああああ

まさか、まさか、と思い、htmlのheadタグ内からfavicon.icoを消したら 正しいURLになってた…

はあ?!って叫びました。

もう嫌!ってなりかけてたけど、ここで諦めたら駄目だと無駄なプライドが意地張ってました。

■解決!

…。

<link rel="shortcut icon" href="favicon.ico">

…。…これが悪い…?…パス…?でもブラウザには表示されてるし…、firefoxだと平気だし、問題はchoromeちゃんだけだし…

<link rel="shortcut icon" href="/favicon.ico">

…ああああああああああああ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!できた!!!!!!!!!!

■根本解決? には至らず。

調べたところ、Chromeだけの現象のようです。

faviconのパスをちゃんと「頭から」指定してあげないと、sessionに上書きされて、laravelやcakePHPのsessionにある _previous というリダイレクト先が上書きされてしまう様子。 また、favicon.icoのみならず、ドキュメントルート以下の画像、css、jsファイルも同様の現象が起きている模様です。

はあ…疲れた。寝ます。

いい機会でした。

見てくれた皆さんは、くれぐれもパスには注意しましょう。

P.S. 仲間がいました。

Laravel バリデーションが変な場所へリダイレクトしてしまう – console dot log

www.kaasan.info

ほーらやっぱり!!!!!!!!!

OGP

OGPってなんぞ?

まさに↓のようにリンクを貼ると任意の画像やコメントが表示される技術のことですねえ。

Open Graph Protcol

だそうです。

もし今後SNSを利用し広める場合は設定したほうが良さそうです。

設定内容も特に難しくはなく、headタグとhtmlタグにちょいちょい記載するのみのようですし。

www.creative-web.co.jp

ferret-plus.com

外部キーが貼られているテーブルをtruncate

こんばんは。 新年早々酒を飲みながら開発してます。

いやはや、一からきっちり設計しつつ開発しつつ‥はぶつかる壁も多いです。

さて、laravelのmigrationにて外部キーも貼りつつ、seederも作っていると、 migrationの度に外部キーの貼ったテーブルをリセットしてやりたいなあと思いますよね。

でもそれできないんですよね、mysqlの設定を弄らいない限り。

外部キー貼ったテーブルはtruncateできんのじゃ!って怒られます。

調べても、やはりmysqlへの命令を投げて上げる必要があるらしい。

参考にしたURLは以下です。

私のブログは一向に調べたリンクしか貼らない。クソブログです(鬱)

qiita.com

外部キーの張り方 @laravel , mysql

こんばんは。 今年も今日で最後です。

さて、 laravelのmigrationで外部キーを貼る時は

$table->foreign('pref_id')->references('id')->on('prefs');

とするのですが…

SQLSTATE[HY000]: General error: 1005 Can't create table 'dbname.tablename' (errno: 150) (SQL: alter table `*****` add constraint `*****_foreign` foreign key (`pref_id`) references `prefs` (`id`))  

とエラーがでたのですね。 なんでやと。

結局のところ、考えれば分かるのですが、 参照元と参照先のデータの「桁数」の違いでした。

ただ、laravelのmigrationでは、integerの桁数を意図的に設定できないんですよね。 設定方法を知らなかっただけなのですが。

教えてくだちい。

ちなみに今日参考にしたサイトは以下です。ありがとうございました。 皆様良いお年を。

qiita.com