有个想要更了解个人开发者的愿望,于是发布了YouDev平台

eyecatch.png

我们已经发布了YouDev。2020年5月1日。

YouDev是一个关注个人开发者并希望更多人了解个人开发者(我自己也想知道)的服务。

我认为即使服务受到认可,开发者也没有受到足够的关注,所以个人开发者应该不仅仅宣传他们发布的服务,还可以宣传开发者自己。

我们一直在招募个人开发者,所以如果你觉得自己是个人开发者,请注册一下!

无论能否改善,我们都接受您的意见和建议!

我的规格是什么

・不太懂编程的工程师
・开发经验: 3年
・个人开发经验: 半年(2020年1月决定今年开始个人开发!)
・开发语言: Python(半年)
・设计感: 毫无(不使用框架就无法设计)
・无法跟上最新技术的速度。
・对Python感兴趣的外行人。
・开始个人开发时想在Qiita上发表这样的文章,但感觉氛围不同。(似乎没有机会展示不懂编程的工程师的能力。。)
・难道Qiita只能用Markdown写吗!?这是什么,不行!

YouDev的目标所追求的

我突然对了解个人开发者感兴趣。

当我想知道个人开发者是什么样的人,他们都做些什么活动的时候,会有一些有用的服务可供选择。

致力于为个人开发者提供有益的认知扩展活动的平台。

正式环境或者生产环境

youdev構成図.png

就是这个样子。

因为以前没有怎么使用过PostgreSQL,所以选择了MySQL。
虽然本来想使用AWS的RDS,但这个服务并没有盈利,所以还是乖乖地在EC2上安装了。
不过,我还是想尝试一下RDS……

希望能够避免使用S3,但由于用户还有需要注册的图像数据,所以决定使用S3。因为EC2的存储容量只有8GB,所以也选择了在这方面听从S3。

然而,在服务中共同使用的图像数据、CSS和脚本等将在EC2中创建一个新的静态文件夹,并从那里进行传输。(最糟糕的情况下,它们也是可以损坏的文件。)

源代码在私人的 GitHub 上进行管理。

使用Django时利用亚马逊S3

由于在生产环境启动后,我一开始将媒体文件与EC2的静态文件放在同一目录下进行操作,所以首先必须将它们迁移到S3中。

创建S3存储桶

我要创建一个S3的存储桶。

在这里基本上没有什么需要担心的地方。

1. 创建存储桶
2. 添加IAM用户(建议在此处复制访问密钥)
3. 创建组(应用AmazonS3FullAccess策略)
4. 将第2步创建的用户添加至第3步创建的组中
5. 将第2步创建的用户添加至存储桶用户

迁移至S3

首先需要在以下位置进行身份验证的确认

$ 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

若未設定,將無法連接至S3,因此請設定剛剛創建的使用者的存取金鑰和密鑰。

$ aws configure

AWS Access Key ID [None]: <アクセスキー>
AWS Secret Access Key [None]:<シークレットキー>
Default region name [None]: <なにも入力してない>
Default output format [None]:<なにも入力してない> 

现在可以连接到S3,所以准备好上传吧!


$ cd /usr/share/nginx/html/media/ #ここは移行したいファイルがあるディレクトリ

$ aws s3 cp --recursive uploads s3://<バケット名>/<フォルダ名>

这样就可以了!

顺便提一下:
· 如果加上 –recursive 参数,将会包括目录作为目标。
· 如果使用 sync 而不是 cp,将不是复制而是同步。

Django的配置要设置

必须在Django的一侧将媒体文件的上传和参考路径改为指向S3。

要使用Django来使用S3,需要安装以下模块。

$ pip install django-storages
$ pip install boto3

在设置中添加以下内容


INSTALLED_APPS = [
    ...
    'storages', #追加
]

...

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', #追加
                #これを追加してあげることでtemplateから{{MEDIA_URL}}でS3を参照できるようになります。
            ],
        },
    },
]

...

# MEDIA_URL = '/media/'
AWS_ACCESS_KEY_ID = '<アクセスキー>'
AWS_SECRET_ACCESS_KEY = '<シークレットキー>'
AWS_STORAGE_BUCKET_NAME = '<バケット名>'

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)

只需这样,您就可以上传到S3并参考S3。

使用的库系统

社交认证应用程序-Django

这是一个库,可以让您能够在使用Django创建的服务上通过各种社交媒体平台(如Twitter、Google、Facebook等)进行登录。

在Twitter账户上进行认证设置

$ pip install social-auth-app-django
INSTALLED_APPS = [
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'social_django', #ここを追加
]
...

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',#ここを追加
            ],
        },
    },
]

...

SOCIAL_AUTH_URL_NAMESPACE = 'social' #追加

#AUTHENTICATION_BACKENDSを追加
AUTHENTICATION_BACKENDS = [
    'social_core.backends.twitter.TwitterOAuth',
    'django.contrib.auth.backends.ModelBackend',
]

#以下は本番環境では環境変数に設定すること!
SOCIAL_AUTH_TWITTER_KEY = 'xxxxxxxx' # Consumer Key (API Key)
SOCIAL_AUTH_TWITTER_SECRET = 'xxxxxxxxx'# Consumer Secret (API Secret)
SOCIAL_AUTH_LOGIN_REDIRECT_URL = '' # ログイン時のリダイレクトURL
LOGOUT_REDIRECT_URL = '' #ログアウト時のリダイレクトURL

urlpatterns = [
    ...
    path('', include('social_django.urls')), #追加#
    #↑を追加することで アプリ側から以下URLにアクセスすることで各処理が可能になります。
    #ログイン:/login/twitter
    #ログアウト:/disconnect/twitter/ 
    #※ログアウトはDjango側のauth_views.LogoutView.as_viewを使う方がベター
    #complete:/complete/twitter/
    ...   
]
スクリーンショット 2020-05-12 22.04.03.png

只需迁移一下,就可以开始使用了。

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

请求-oauthlib

这是一个能够实现在使用TwitterAPI时通过几行代码实现OAuth的库。

$ pip install requests requests_oauthlib

TWITTER_ACCESS_TOKEN = 'XXXXXX' #追加
TWITTER_ACCESS_TOKEN_SECRET='XXXXX' #追加

这里将提供获取用户信息的方法作为示例进行说明。

将上述内容添加到settings.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" #エンドポイントは公式のドキュメント参照
    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

MaterializeCSS(设计)

公式文件

就像我在开头所提到的那样,如果不使用库,就无法进行CSS的处理。
由于可以安装scss,如果不喜欢的话,可以批量更改主色等。

请注意:下拉菜单存在故障,当选择框重叠在下面的下拉菜单时,无法正确选择。

我一度绝望了,但是看到了下面这个Github上有修复代码,如果使用它就能解决问题!

GitHub修订版

裁剪.js

这是一个能够帮助裁剪图像的库。
当然,我自己无法实现裁剪处理,所以使用了它。

无论读了多少次文档,实现方法一直是个谜,但在第几十次时,终于通过以下网站理解了。

即使是个菜鸟,经过数十次的尝试,应该就能明白!

以下是大致上所使用的库。

我绊倒了

MySQL的版本

从Django3.0起,根据官方文档的推荐,连接MySQL的驱动程序应该选择mysqlclient。因此,我尝试安装了它,但遇到了错误。

$ pip install mysqlclient

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

謎のエラー

原因mysqlのバージョンが古いことに起因してるみたい

我使用AWS的Cloud9作为开发环境,Cloud9的初始状态下已经安装了MySQL。

然而,由于版本5.5的mysqlclient只能从5.7版本开始使用,所以我删除了5.5版本并安装了5.7版本。

 sudo yum remove mysql* #mysqlの削除
 #(慎重な方はsudo yum -y remove mysql-config mysql55-server mysql55-libs mysql55)

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

将绘文字注册到MySQL中。

由于最初将字符集设置为utf-8,因此无法注册表情符号。

更改設定檔

[mysqld]
character-set-server=utf8mb4

[client]
default-character-set=utf8mb4

重新启动 MySQL

sudo service mysqld restart

由于表格已经以UTF-8格式创建完成,所以无需进行修改。

ALTER TABLE targettable CONVERT TO CHARACTER SET utf8mb4;

在Django中,还需要在Django端进行配置。

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

现在我们可以输出和注册表情符号了!

最后!

请务必注册,我们将继续努力添加各种功能!

广告
将在 10 秒后关闭
bannerAds