[PYTHON] Ich möchte mehr über einzelne Entwickler erfahren. YouDev wurde veröffentlicht.

eyecatch.png

YouDev wurde veröffentlicht. 2020.5.01

YouDev ist ein Dienst, der sich auf einzelne Entwickler konzentriert und sie mehr wissen lässt (ich möchte wissen ...).

Selbst wenn der Service erkannt wird, denke ich, dass der Entwickler nicht im Rampenlicht steht, und ich denke, dass einzelne Entwickler nicht nur den Service, sondern auch den Entwickler selbst ansprechen können. Ich habe es geschaffen.

Wir sind immer auf der Suche nach einzelnen Entwicklern, also ** bin ich ein einzelner Entwickler! Wenn Sie ** denken, registrieren Sie sich bitte!

Darüber hinaus akzeptieren wir Verbesserungen, unabhängig davon, ob sie verbessert werden können oder nicht!

Meine Angaben

・ ** Heppoko Engineer </ font> ** ・ Entwicklungsgeschichte: 3 Jahre ・ Persönliche Entwicklungsgeschichte: ein halbes Jahr (2020.01 habe ich beschlossen, dieses Jahr eine persönliche Entwicklung durchzuführen! **) ・ Entwicklungssprache: Python (ein halbes Jahr) ・ Design-Sinn: ** Keine ** (Design ist ohne Verwendung eines Frameworks nicht möglich.) ・ Ich kann heutzutage nicht mit der Geschwindigkeit neuer Technologien Schritt halten. ・ Python ist heiß! ?? Ich denke nur ** ・ Lass uns auf Qiita posten, wenn du mit der persönlichen Entwicklung beginnst! Ich dachte, aber die Atmosphäre war anders. (Es scheint keinen Vorhang für Heppoko-Ingenieure zu geben.) ・ Qiita kann nur in MarkDown geschrieben werden! ?? Was ist das unmöglich!

Was YouDev anstrebt

Jedenfalls wollte ich etwas über einzelne Entwickler wissen.

Was für Leute sind einzelne Entwickler und welche Aktivitäten machen sie? Ein Service, der nützlich ist, wenn Sie denken

Streben Sie einen Ort für Sensibilisierungsmaßnahmen an, der für einzelne Entwickler von Vorteil ist.

Produktionsumfeld

youdev構成図.png

So was.

DB verwendete MySQL, weil ich PostgreSQL nicht sehr oft verwendet hatte. Ich wollte eigentlich AWS RDS verwenden, aber es war kein monetisierter Dienst, deshalb habe ich ihn leise in EC2 installiert. Aber ich möchte immer noch RDS verwenden. ..

Ich wollte die Verwendung von S3 nach Möglichkeit vermeiden, habe mich jedoch für die Verwendung von S3 entschieden, da vom Benutzer Bilddaten registriert sind. Erstens beträgt die Speicherkapazität von EC2 nur 8 GB, daher habe ich mich auch hier leise für S3 entschieden.

Für Bilddaten, CSS und Skriptsysteme, die üblicherweise innerhalb des Dienstes verwendet werden, wird jedoch auf der EC2-Seite ein neuer statischer Ordner erstellt und von dort verteilt. (Im schlimmsten Fall handelt es sich um eine Datei, die beschädigt werden kann.)

Der Quellcode wird von privatem Github verwaltet.

Verwenden Sie Amazon S3 mit Django

Unmittelbar nach der Inbetriebnahme der Produktionsumgebung habe ich Mediendateien im selben Verzeichnis wie EC2 static betrieben, sodass ich sie zuerst in S3 verschieben musste. ..

Erstellen eines S3-Buckets

Erstellen Sie ernsthaft einen Bucket für S3.

Grundsätzlich gab es hier keine Stolpersteine.

  1. Erstellen Sie einen Bucket
  2. Fügen Sie einen IAM-Benutzer hinzu (möglicherweise sollten Sie den Zugriffsschlüssel hier kopieren).
  3. Gruppe erstellen (Richtlinie gilt für Amazon S3 Full Access) Fügen Sie den in 4.2 erstellten Benutzer der in 3 erstellten Gruppe hinzu.
  4. Fügen Sie den in 2 erstellten Benutzer zu den Bucket-Benutzern hinzu

Übergang zu S3

Bestätigen Sie zunächst die unten stehende Zertifizierung

$ aws configure list

      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                <not set>             None    None
access_key                <not set>             None    None
secret_key                <not set>             None    None
    region                <not set>             None    None

Wenn es nicht festgelegt ist, können Sie keine Verbindung zu S3 herstellen. Legen Sie daher den Zugriffsschlüssel und den geheimen Schlüssel des zuvor erstellten Benutzers fest.

$ aws configure

AWS Access Key ID [None]: <Zugangsschlüssel>
AWS Secret Access Key [None]:<Geheimer Schlüssel>
Default region name [None]: <Ich habe nichts eingegeben>
Default output format [None]:<Ich habe nichts eingegeben> 

Jetzt, da Sie eine Verbindung zu S3 herstellen können, laden Sie es hoch!


$ cd /usr/share/nginx/html/media/ #Dies ist das Verzeichnis, das die Dateien enthält, die Sie migrieren möchten

$ aws s3 cp --recursive uploads s3://<Eimername>/<Ordnernamen>

Ich hab es geschafft!

Apropos -Wenn --recursive hinzugefügt wird, wird das Verzeichnis als Ziel ausgewählt. -Wenn die Synchronisierung anstelle von cp verwendet wird, wird sie anstelle der Kopie synchronisiert.

Einstellungen auf der Django-Seite

Auf der Django-Seite müssen Sie die Mediendatei hochladen und das Referenzziel so ändern, dass es zu S3 zeigt.

Die folgenden Module sind erforderlich, um S3 mit Django zu verwenden. Installieren Sie es daher.

Installation


$ pip install django-storages
$ pip install boto3

Fügen Sie der Einstellung Folgendes hinzu

settings.py



INSTALLED_APPS = [
    ...
    'storages', #hinzufügen
]

...

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'social_django.context_processors.backends',
                'social_django.context_processors.login_redirect',
                
                'django.template.context_processors.media', #hinzufügen
                #Durch Hinzufügen dieser aus Vorlage{{MEDIA_URL}}Sie können mit auf S3 verweisen.
            ],
        },
    },
]

...

# MEDIA_URL = '/media/'
AWS_ACCESS_KEY_ID = '<Zugangsschlüssel>'
AWS_SECRET_ACCESS_KEY = '<Geheimer Schlüssel>'
AWS_STORAGE_BUCKET_NAME = '<Eimername>'

AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME
AWS_LOCATION = 'media'
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
MEDIA_URL = "https://%s/%s/" % (AWS_S3_CUSTOM_DOMAIN, AWS_LOCATION)

Jetzt können Sie auf S3 hochladen und S3 durchsuchen.

Bibliothekssystem verwendet

social-auth-app-django

Eine Bibliothek, mit der Sie sich bei Diensten anmelden können, die mit Django über soziale Dienste (Twitter, Google, Facebook usw.) erstellt wurden.

Authentifizierungseinstellungen für das Twitter-Konto

Installation


$ pip install social-auth-app-django

settings.py


INSTALLED_APPS = [
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'social_django', #Hier hinzufügen
]
...

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'social_django.context_processors.backends',#Hier hinzufügen
                'social_django.context_processors.login_redirect',#Hier hinzufügen
            ],
        },
    },
]

...

SOCIAL_AUTH_URL_NAMESPACE = 'social' #hinzufügen

#AUTHENTICATION_BACKENDS hinzugefügt
AUTHENTICATION_BACKENDS = [
    'social_core.backends.twitter.TwitterOAuth',
    'django.contrib.auth.backends.ModelBackend',
]

#Folgendes sollte in den Umgebungsvariablen in der Produktionsumgebung festgelegt werden!
SOCIAL_AUTH_TWITTER_KEY = 'xxxxxxxx' # Consumer Key (API Key)
SOCIAL_AUTH_TWITTER_SECRET = 'xxxxxxxxx'# Consumer Secret (API Secret)
SOCIAL_AUTH_LOGIN_REDIRECT_URL = '' #URL beim Login umleiten
LOGOUT_REDIRECT_URL = '' #URL beim Abmelden umleiten

project/urls.py


urlpatterns = [
    ...
    path('', include('social_django.urls')), #hinzufügen#
    #Durch Hinzufügen von ↑ kann jeder Prozess ausgeführt werden, indem von der Anwendungsseite aus auf die folgende URL zugegriffen wird.
    #Einloggen:/login/twitter
    #Ausloggen:/disconnect/twitter/ 
    #* Abmelden ist Auth auf der Django-Seite_views.LogoutView.as_Besser Ansicht verwenden
    #complete:/complete/twitter/
    ...   
]

/ complete / twitter / ist die Rückruf-URL für die Twitter-API. Beispiel) スクリーンショット 2020-05-12 22.04.03.png

Danach können Sie es durch Migration verwenden

migrate


$ python manage.py makemigrations social_django
$ python manage.py migrate

requests-oauthlib

Dies ist eine Bibliothek, mit der Sie OAuth implementieren können, wenn Sie die Twitter-API mit wenigen Codes verwenden.

Installation


$ pip install requests requests_oauthlib

settings.py



TWITTER_ACCESS_TOKEN = 'XXXXXX' #hinzufügen
TWITTER_ACCESS_TOKEN_SECRET='XXXXX' #hinzufügen

Hier wird beispielhaft das Verfahren zum Erfassen von Benutzerinformationen beschrieben.

Füllen Sie das Obige an einer beliebigen Stelle in settings.py aus.

views.py



CK = settings.SOCIAL_AUTH_TWITTER_KEY 
CS = settings.SOCIAL_AUTH_TWITTER_SECRET
AT = settings.TWITTER_ACCESS_TOKEN
ATS = settings.TWITTER_ACCESS_TOKEN_SECRET

def getAccount(request,screen_name):
    url = "https://api.twitter.com/1.1/users/show.json" #Endpunkte finden Sie in der offiziellen Dokumentation
    params = {
        'screen_name':screen_name
    }
    req = twitter.get(url, params = params)
    
    if req.status_code == 200:
        res = json.loads(req.text)
        
    else:
        res=""
        print("Failed: %d" % req.status_code)
    
    return res

Materialisieren Sie CSS (Design)

Offizielles Dokument

Wie eingangs erwähnt, können Sie CSS nicht ohne die Bibliothek ausführen. .. .. Sie können auch scss installieren. Wenn es Ihnen nicht gefällt, können Sie die Hauptfarbe usw. auf einmal ändern.

** * Hinweis: Wenn das Auswahlfeld defekt ist und das Auswahlfeld das Auswahlfeld unten überlappt. Es gab ein Problem, dass es nicht richtig ausgewählt werden konnte. </ font> **

Ich war verzweifelt, aber der Reparaturcode wurde auf dem folgenden Github veröffentlicht. Wenn Sie diesen verwenden, wird er gelöst!

Reparierte Version Git Hub

cropper.js

Eine Bibliothek, die Bilder zuschneidet. Natürlich konnte ich den Trimmprozess nicht selbst implementieren, also habe ich ihn verwendet.

Egal wie oft ich das Dokument gelesen habe, die Implementierungsmethode war ein Rätsel, aber ich habe die folgende Site Dutzende Male verstanden.

Selbst wenn Sie ein paar Dutzend Mal durchlaufen, sollten Sie es wissen!

Meistens die oben verwendeten Bibliotheken.

Stolpern

MySQL-Version

Ab Django 3.0 wird der Treiber, der eine Verbindung zu MySQL herstellt, im offiziellen Dokument als von MySQL-Client empfohlen beschrieben. Daher habe ich versucht, ihn leise zu installieren, aber es ist ein Fehler aufgetreten. ..

python


$ pip install mysqlclient

> ~
 check the manual that corresponds to your MySQL server version for the right syntax to use near 'rsion' at line 1
 ~

Geheimnisvoller Fehler

Ursache: Scheint auf eine ältere Version von MySQL zurückzuführen zu sein
 

Die Entwicklungsumgebung verwendet Cloud9 von AWS, aber mit Cloud9 wird MySQL im Ausgangszustand installiert.

Es scheint jedoch, dass die Version 5.5 ist und mysqlclient nur ab 5.7 verwendet werden kann. Deshalb habe ich 5.5 entfernt und 5.7 installiert.

python


 sudo yum remove mysql* #Entfernen Sie MySQL
 #(Wenn Sie vorsichtig sind, sudo yum-y remove mysql-config mysql55-server mysql55-libs mysql55)

 sudo yum -y install mysql57-server mysql57
 sudo yum -y install mysql-devel

Registrieren Sie Piktogramme in MySQL

Ursprünglich war der Zeichensatz auf utf-8 eingestellt, sodass Piktogramme nicht registriert werden konnten.

Ändern Sie die Einstellungsdatei

/etc/my.cnf


[mysqld]
character-set-server=utf8mb4

[client]
default-character-set=utf8mb4

Starten Sie MySQL neu

/etc/my.cnf


sudo service mysqld restart

Die Tabelle wurde bereits mit utf-8 erstellt. Ändern Sie sie daher

mysql


ALTER TABLE targettable CONVERT TO CHARACTER SET utf8mb4;

Im Fall von Django sind Einstellungen auch auf der Django-Seite erforderlich

settings.py


DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'xxx',
        'USER': 'xxx',
        'PASSWORD': 'xxx',
        'HOST': '',
        'PORT': '',
        #OPTIONEN hinzugefügt
        'OPTIONS': {
            'charset': 'utf8mb4',
        },
    }
}

Jetzt können Sie Piktogramme ausgeben und registrieren!

endlich !

Wir werden weiterhin unser Bestes tun, um Funktionen hinzuzufügen. Bitte registrieren Sie sichYoudev

Recommended Posts