[PYTHON] Je souhaite en savoir plus sur les développeurs individuels. YouDev a été libéré.

eyecatch.png

YouDev a été publié. 2020.5.01

YouDev est un service qui se concentre sur les développeurs individuels et leur permet d'en savoir plus (je veux en savoir ...).

Même si le service est reconnu, je pense que le développeur n'est pas sous les projecteurs, donc je pense que les développeurs individuels peuvent faire appel non seulement au service mais aussi au développeur lui-même. Je l'ai créé.

Nous sommes toujours à la recherche de développeurs individuels, donc ** je suis un développeur individuel! Si vous pensez **, veuillez vous inscrire!

De plus, nous acceptons les améliorations, qu'elles puissent être améliorées ou non!

Mes spécifications

・ ** Ingénieur Heppoko </ font> ** ・ Historique du développement: 3 ans ・ Historique du développement personnel: un semestre (en 2020.01, j'ai décidé de faire du développement personnel cette année! **) ・ Langage de développement: python (six mois) ・ Sens du design: ** Aucun ** (Le design est impossible sans utiliser un cadre.) ・ Je ne peux pas suivre la vitesse des nouvelles technologies de nos jours. ・ Python est chaud! ?? Je pense juste ** ・ Publions sur Qiita lorsque vous commencez le développement personnel! J'ai pensé, mais l'ambiance était différente. (Il ne semble pas y avoir de rideau pour les ingénieurs Heppoko.) ・ Qiita ne peut être écrit qu'en MarkDown! ?? Qu'est-ce que c'est impossible!

Ce que YouDev vise

Quoi qu'il en soit, je voulais en savoir plus sur les développeurs individuels.

Quel genre de personnes sont des développeurs individuels et quel genre d'activités font-ils? Un service utile quand on pense

Visez un lieu d'activités de sensibilisation qui soit bénéfique aux développeurs individuels.

Environnement de production

youdev構成図.png

Comme ça.

DB a utilisé MySQL parce que je n'avais pas beaucoup utilisé PostgreSQL. Je voulais vraiment utiliser AWS RDS, mais ce n'était pas un service monétisé, alors je l'ai installé discrètement dans EC2. Mais je veux toujours utiliser RDS. ..

Je voulais éviter d'utiliser S3 si possible, mais j'ai décidé d'utiliser S3 car il y a des données d'image enregistrées par l'utilisateur. En premier lieu, la capacité de stockage d'EC2 n'est que de 8 Go, j'ai donc choisi S3 tranquillement ici aussi.

Cependant, pour les données d'image, le CSS et les systèmes de script couramment utilisés dans le service, un nouveau dossier statique est créé du côté EC2 et distribué à partir de là. (Au pire, c'est un fichier qui peut être corrompu.)

Le code source est géré par github privé.

Utiliser Amazon S3 avec Django

Immédiatement après la mise en ligne de l'environnement de production, j'avais l'habitude d'exploiter les fichiers multimédias dans le même répertoire que EC2 static, donc je devais d'abord les déplacer vers S3. ..

Créer un compartiment S3

Créez sérieusement un compartiment pour S3.

Il n'y avait fondamentalement aucun point d'achoppement ici.

  1. Créez un bucket
  2. Ajoutez un utilisateur IAM (vous devriez peut-être copier la clé d'accès ici)
  3. Créer un groupe (la stratégie applique l'accès complet à Amazon S3) Ajoutez l'utilisateur créé en 4.2 au groupe créé en 3.
  4. Ajoutez l'utilisateur créé dans 2 aux utilisateurs du compartiment

Transition vers S3

Tout d'abord, confirmez la certification ci-dessous

$ 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

S'il n'est pas défini, vous ne pourrez pas vous connecter à S3, définissez donc la clé d'accès et la clé secrète de l'utilisateur que vous avez créé précédemment.

$ aws configure

AWS Access Key ID [None]: <clé d'accès>
AWS Secret Access Key [None]:<Clef secrète>
Default region name [None]: <Je n'ai rien entré>
Default output format [None]:<Je n'ai rien entré> 

Maintenant que vous pouvez vous connecter à S3, téléchargez-le!


$ cd /usr/share/nginx/html/media/ #C'est le répertoire qui contient les fichiers que vous souhaitez migrer

$ aws s3 cp --recursive uploads s3://<Nom du godet>/<Nom de dossier>

J? ai compris!

Au fait -Si --recursive est ajouté, le répertoire sera ciblé. -Si la synchronisation est utilisée à la place de cp, elle sera synchronisée au lieu de la copie.

Paramètres côté Django

Du côté de Django, vous devez télécharger le fichier multimédia et changer la destination de référence pour qu'il fasse face à S3.

Les modules suivants sont requis pour utiliser S3 avec Django, donc installez-le.

Installation


$ pip install django-storages
$ pip install boto3

Ajoutez ce qui suit au paramètre

settings.py



INSTALLED_APPS = [
    ...
    'storages', #ajouter à
]

...

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', #ajouter à
                #En ajoutant ceci, à partir du modèle{{MEDIA_URL}}Vous pourrez faire référence à S3 avec.
            ],
        },
    },
]

...

# MEDIA_URL = '/media/'
AWS_ACCESS_KEY_ID = '<clé d'accès>'
AWS_SECRET_ACCESS_KEY = '<Clef secrète>'
AWS_STORAGE_BUCKET_NAME = '<Nom du godet>'

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)

Vous pouvez maintenant télécharger sur S3 et parcourir S3.

Système de bibliothèque utilisé

social-auth-app-django

Une bibliothèque qui vous permet de vous connecter aux services créés avec Django en utilisant les services sociaux (twitter, google, facebook, etc.).

Paramètres d'authentification pour le compte Twitter

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', #Ajouter ici
]
...

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',#Ajouter ici
                'social_django.context_processors.login_redirect',#Ajouter ici
            ],
        },
    },
]

...

SOCIAL_AUTH_URL_NAMESPACE = 'social' #ajouter à

#AUTHENTICATION_BACKENDS ajoutés
AUTHENTICATION_BACKENDS = [
    'social_core.backends.twitter.TwitterOAuth',
    'django.contrib.auth.backends.ModelBackend',
]

#Les éléments suivants doivent être définis dans les variables d'environnement de l'environnement de production!
SOCIAL_AUTH_TWITTER_KEY = 'xxxxxxxx' # Consumer Key (API Key)
SOCIAL_AUTH_TWITTER_SECRET = 'xxxxxxxxx'# Consumer Secret (API Secret)
SOCIAL_AUTH_LOGIN_REDIRECT_URL = '' #Rediriger l'URL lors de la connexion
LOGOUT_REDIRECT_URL = '' #Rediriger l'URL lors de la déconnexion

project/urls.py


urlpatterns = [
    ...
    path('', include('social_django.urls')), #ajouter à#
    #En ajoutant ↑, chaque processus peut être effectué en accédant à l'URL suivante depuis le côté application.
    #S'identifier:/login/twitter
    #Se déconnecter:/disconnect/twitter/ 
    #* La déconnexion est authentifiée côté Django_views.LogoutView.as_Mieux vaut utiliser la vue
    #complete:/complete/twitter/
    ...   
]

/ complete / twitter / sera l'URL de rappel de l'API Twitter. Exemple) スクリーンショット 2020-05-12 22.04.03.png

Après cela, vous pouvez l'utiliser en migrant

migrate


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

requests-oauthlib

Il s'agit d'une bibliothèque qui vous permet d'implémenter OAuth lors de l'utilisation de l'API Twitter avec quelques codes.

Installation


$ pip install requests requests_oauthlib

settings.py



TWITTER_ACCESS_TOKEN = 'XXXXXX' #ajouter à
TWITTER_ACCESS_TOKEN_SECRET='XXXXX' #ajouter à

Ici, à titre d'exemple, la méthode d'acquisition des informations utilisateur est décrite.

Remplissez ce qui précède n'importe où dans settings.py.

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" #Voir la documentation officielle pour les terminaux
    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

Materialise CSS (conception)

Document officiel

Comme je l'ai mentionné au début, vous ne pouvez pas faire de CSS sans utiliser la bibliothèque. .. .. Vous pouvez également installer scss, donc si vous ne l'aimez pas, vous pouvez changer la couleur principale, etc. en même temps.

** * Remarque: Si la case de sélection est défectueuse et que le champ de sélection de sélection chevauche la case de sélection ci-dessous. Il y a eu un problème qui n'a pas pu être sélectionné correctement. </ font> **

J'étais désespéré, mais le code de réparation a été affiché sur le github suivant, donc si vous l'utilisez, il sera résolu!

Version réparée git hub

cropper.js

Une bibliothèque qui recadre les images. Bien sûr, je ne pouvais pas mettre en œuvre le processus de coupe moi-même, alors je l'ai utilisé.

Peu importe combien de fois j'ai lu le document, la méthode de mise en œuvre était un mystère, mais j'ai finalement compris le site suivant des dizaines de fois.

Même si vous passez par quelques dizaines de fois, vous devriez le savoir!

Principalement les bibliothèques utilisées ci-dessus.

Trébucher

version mysql

Depuis Django3.0, le pilote qui se connecte à mysql est décrit dans le document officiel comme mysqlclient recommandé, j'ai donc essayé de l'installer tranquillement, mais il y avait une erreur. ..

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
 ~

Erreur mystérieuse

Cause: semble être dû à une ancienne version de mysql
 

L'environnement de développement utilise Cloud9 d'AWS, mais avec cloud9, mysql est installé dans l'état initial.

Cependant, il semble que la version est 5.5 et mysqlclient ne peut être utilisé qu'à partir de 5.7, j'ai donc supprimé 5.5 et installé 5.7.

python


 sudo yum remove mysql* #Supprimer mysql
 #(Si vous faites attention, sudo miam-y remove mysql-config mysql55-server mysql55-libs mysql55)

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

Enregistrer les pictogrammes dans mysql

À l'origine, charset était défini sur utf-8, de sorte que les pictogrammes ne pouvaient pas être enregistrés.

Changer le fichier de paramètres

/etc/my.cnf


[mysqld]
character-set-server=utf8mb4

[client]
default-character-set=utf8mb4

Redémarrez mysql

/etc/my.cnf


sudo service mysqld restart

La table a déjà été créée avec utf-8, alors changez-la

mysql


ALTER TABLE targettable CONVERT TO CHARACTER SET utf8mb4;

Dans le cas de Django, les paramètres sont également requis du côté Django

settings.py


DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'xxx',
        'USER': 'xxx',
        'PASSWORD': 'xxx',
        'HOST': '',
        'PORT': '',
        #OPTIONS ajoutées
        'OPTIONS': {
            'charset': 'utf8mb4',
        },
    }
}

Vous pouvez maintenant sortir et enregistrer des pictogrammes!

à la fin !

Nous continuerons à faire de notre mieux pour ajouter des fonctions, alors veuillez vous inscrireYoudev

Recommended Posts