試著為Django添加認證功能 第一部分
以下是一个中国语言的本地化重述:
背景信息
因为想在Django上添加认证功能,所以尝试在网络上搜索,但没有找到简单易懂的文章。
然而,在Django2中实现用户认证(登录认证)的教程-1-环境配置和应用模板创建 看起来最容易理解,所以我参考了这篇文章,但在一些细节上遇到了问题,所以我决定记录下我成功运行的步骤。
行为背景
CentOS Linux 7.5.1804版本(核心)
MySQL 8.0.12版本
$ python3 -V
Python 3.6.5版本
django版本2.1.1最终版(0)
暫時先嘗試建立一個 Django 專案和應用程式。
$ mkdir login 適当なディレクトリを作成
$ cd login
$python3 -m venv myvenv 仮想環境構築
$ ls
myvenv
$ tree -L 1 myvenv
myvenv
--- bin
--- include
--- lib
---- lib64 -> lib
---- pyvenv.cfg
在虚拟环境中安装Django并创建项目。
$ bin/pip3 install django==1.8
$ ls
bin include lib lib64 pip-selfcheck.json pyvenv.cfg
$ ls bin
__pycache__ activate.csh django-admin easy_install pip pip3.6 python3
activate activate.fish django-admin.py easy_install-3.6 pip3 python
$django-admin startproject myapp .
$django-admin startproject myapp . プロジェクトを作成します。
$ ls
bin include lib lib64 manage.py myapp pip-selfcheck.json pyvenv.cfg
编辑setting.py文件。
$vi myapp/settings.py
LANGUAGE_CODE = 'ja'
TIME_ZONE = 'Asia/Tokyo'
USE_TZ = False # DefaultではUTCのタイムゾーンのため False に変更
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', <--MySqlを使う設定
'NAME': 'test', データベースは事前に作っておく
'USER': 'root',
'PASSWORD': '*********',
'HOST': '127.0.0.1',
}
}
`manage.py`中进行Mysql的配置。
$vi manage.py
#!/usr/bin/env python
import os
import sys
import datetime
import pymysql <--追加
pymysql.install_as_MySQLdb() <--追加
将数据库迁移。
$python3 manage.py migrate
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying sessions.0001_initial... OK
创建一个blog应用,并在setting.py中进行注册。
$python3 manage.py startapp blog
$vi myapp/settings.py
# Application definition
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog',
)
创建博客的模型。blog/models.py
from django.db import models
from django.utils import timezone
class Post(models.Model):
author = models.ForeignKey('auth.User',on_delete=models.CASCADE)
title = models.CharField(max_length=200)
text = models.TextField()
created_date = models.DateTimeField(default=timezone.now)
published_date = models.DateTimeField(blank=True, null=True)
def publish(self):
self.published_date = timezone.now()
self.save()
def __str__(self):
return self.title
执行数据库迁移。
$ python3 manage.py makemigrations blog
$ python3 manage.py migrate blog
提前创建管理网站的账户。
$ python manage.py createsuperuser
Username (leave blank to use 'your_name'): admin
Email address: email@example.com # メールアドレスを個別に設定
Password: # パスワードを入力
Password (again): # パスワードをもう一度
Superuser created successfully.
设置urls.py文件。
$vi myapp/urls.py
from django.conf.urls import include, url
from django.contrib import admin
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls),
url(r'', include('blog.urls')),
]
$vi blog/urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.post_list),
]
我会创建一个blog/views.py文件。
$vi views.py
from django.shortcuts import render
def post_list(request):
return render(request, 'blog/post_list.html', {})
创建一个HTML文件:/blog/templates/blog/post_list.html
请注意,目录结构较深!
<html>
<p>こんにちは</p>
<p>動いています!!</p>
</html>
开启服务器。
$ python3 manage.py runserver
Performing system checks...
System check identified no issues (0 silenced).
May 27, 2020 - 13:51:11
Django version 2.1.1, using settings 'myapp.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.


虽然变得相对冗长,但是就到这一步来说,准备已经完成可以添加认证功能了。
接下来,尝试添加 Django 认证功能的第二部分。
请在自动驾驶技术方面提供一些建议。
用Python的Web应用程序(Django)对初学者进行简明解释(1)【环境设置】
在Django2中实现用户认证(登录认证)的教程-1- 环境设置和应用程序骨架的创建