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

我们已经发布了YouDev。2020年5月1日。
YouDev是一个关注个人开发者并希望更多人了解个人开发者(我自己也想知道)的服务。
我认为即使服务受到认可,开发者也没有受到足够的关注,所以个人开发者应该不仅仅宣传他们发布的服务,还可以宣传开发者自己。
我们一直在招募个人开发者,所以如果你觉得自己是个人开发者,请注册一下!
无论能否改善,我们都接受您的意见和建议!
我的规格是什么
・不太懂编程的工程师
・开发经验: 3年
・个人开发经验: 半年(2020年1月决定今年开始个人开发!)
・开发语言: Python(半年)
・设计感: 毫无(不使用框架就无法设计)
・无法跟上最新技术的速度。
・对Python感兴趣的外行人。
・开始个人开发时想在Qiita上发表这样的文章,但感觉氛围不同。(似乎没有机会展示不懂编程的工程师的能力。。)
・难道Qiita只能用Markdown写吗!?这是什么,不行!
YouDev的目标所追求的
我突然对了解个人开发者感兴趣。
当我想知道个人开发者是什么样的人,他们都做些什么活动的时候,会有一些有用的服务可供选择。
致力于为个人开发者提供有益的认知扩展活动的平台。
正式环境或者生产环境

就是这个样子。
因为以前没有怎么使用过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/
...
]

只需迁移一下,就可以开始使用了。
$ 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',
},
}
}
现在我们可以输出和注册表情符号了!
最后!
请务必注册,我们将继续努力添加各种功能!