Django Web
身份验证系统搭建上)
使用
Django
搭建一个用户注册和身份验证系统,最终实现多用户注册使用的便签系统。
建立虚拟环境
首先,为新项目建立一个目录,命名为 learning_log
,进入目录并开始虚拟环境的搭建。
建立虚拟环境
1 | mkvirtualenv -p python3 ll_env |
激活虚拟环境
1 | workon ll_env |
安装 Django
这里使用豆瓣源:
1 | pip3 install django -i https://pypi.douban.com/simple |
在 Django
中创建项目
1 | django-admin startproject learning_log . |
使用命令新建一个 Django
项目,名为 learning_log
,末尾的句点(.
)让新项目使用合适的目录结构,这样开发完成之后可轻松地将应用程序部署到服务器上。
千万不要忘了句点,否则部署应用程序时会出现一些配置问题。
创建数据库
1 | python3 manage.py migrate |
启动项目
1 | python3 manage.py runserver |
创建应用程序
保持项目启动的终端运行,重新打开一个终端,进入原项目目录,激活虚拟环境,创建应用程序:
首先,进入自己的项目目录再激活虚拟环境
1 | workon ll_env |
定义模型
使用 pycharm
打开项目,在应用中打开 models.py
定义模型:
1 | from django.db import models |
激活模型
在 settings.py
中添加程序:
- 修改数据库
修改数据库在 Django
中也称为迁移数据库,使用以下命令完成:
1 | python3 manage.py makemigrations learning_logs |
- 执行迁移文件同步变更到数据库
1 | python3 manage.py migrate |
Admin
模块管理
创建超级用户
1 | python3 manage.py createsuperuser |
Username
: akashi
Password
: akashiadmin123
这里只是一个示例,可以自定义。
注册模型
在应用程序下的 admin.py
进行注册:
1 | from learning_logs.models import Topic |
打开管理页(http://127.0.0.1:8000/admin/
),尝试添加一些主题: Chess
、RockClimbin
定义模型 Entry
这时,我们希望可以在学习笔记中添加定义条目的笔记记录,每个条目都与特定的主题相关联,这种关系被称为多对一关系,即多个条目可以关联到同一个主题。
我们再添加模型 Entry
:
1 | class Entry(models.Model): |
这里我们在 Entry
类中嵌套了 Meta
类, Meta
存储用于管理模型的额外信息,我们让它能够设置一个特殊属性,让 Django
在需要时使用 Entries
来表示多个条目。如果没有这个类, Django
将使用 Entrys
来表示多个条目。
迁移模型 Entry
1 | python3 manage.py makemigrations learning_logs |
注册模型
1 | from django.contrib import admin |
同样,完成后添加一些记录在数据库中。
创建网页
使用 Django
创建网页一般分为三个阶段: 定义URL
、编写视图
和编写模板
。
映射 URL
首先,确定页面的存放路径:learning_logs
=> templates
=> learning_logs
=> index.html
根据路径,将项目层的 urls.py
路由到应用层:
1 | from django.contrib import admin |
在应用层新建 urls.py
,然后路由到对应的方法:
1 | from django.urls import path, include |
编写视图
views.py
:
1 | from django.shortcuts import render |
编写模板
index.html
:
1 |
|
这样,通过http://127.0.0.1:8000/note/index
便可以访问。
创建其他网页
同样,确定页面存放路径:learning_logs
=> templates
=> learning_logs
=> topics.html
映射 URL
项目层路由使用同一个,无需添加。
下面设计应用层路由:
1 | from django.urls import path, include |
实现视图层
views.py
:
1 | def get_topics_page(request): |
实现模板
topic.html
:
1 |
|
实现特定主题的页面
- 路由
learning_logs
=> templates
=> learning_logs
=> topic.html
1 | from django.urls import path, include |
- 视图方法
1 | ef get_entry_page(request, topic_id): |
- 模板
topics.html
:
1 |
|
topic.html
:
1 |
|
用户添加新主题
导入表单模块
1 | from django import forms |
URL
设计
1 | from django.urls import path, include |
视图函数
1 | from django.http import HttpResponseRedirect |
模板
new_topic.html
:
1 |
|
在 topics.html
添加链接:
1 | <div> |
用户添加新条目
添加新条目表单
1 | from .models import Topic, Entry |
URL
设计
1 | from django.urls import path, include |
视图函数
1 | from .forms import TopicForm, EntryForm |
模板
new_entry
:
1 |
|
topic.html
:
添加链接:
1 | ... |
编辑条目
URL
设计
1 | from django.urls import path, include |
视图函数
1 | from learning_logs.models import Topic, Entry |
模板
edit_entry.html
:
1 |
|
topic.html
:
链接到页面 edit_entry
:
1 |
|
至此,项目已经具备了需要的大部分功能。