試著為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.
hello.jpeg
kanrisite2.jpeg

虽然变得相对冗长,但是就到这一步来说,准备已经完成可以添加认证功能了。
接下来,尝试添加 Django 认证功能的第二部分。

请在自动驾驶技术方面提供一些建议。

用Python的Web应用程序(Django)对初学者进行简明解释(1)【环境设置】
在Django2中实现用户认证(登录认证)的教程-1- 环境设置和应用程序骨架的创建

广告
将在 10 秒后关闭
bannerAds