了解Django框架下如何配置数据库链接与创建模型和应用
使用Django创建web项目,首先需要了解生成的项目文件结构,以及对应文件功能用途方可开始web项目页面创建,下方先介绍文件功能,之后再配置数据库连接以及管理创建模型与应用,最后创建超级管理员启动django自带的管理站点界面。
1. 项目文件目录与功能介绍
从(一)中找到初始化生成的项目文件如下:
test004 //主文件夹
--- test004
--- __init__.py //一个空文件,标识该目录为一个Python包
--- settings.py //项目的配置文件
--- urls.py //路由文件 项目的URL声明
--- asgi.py //作为你的项目的运行在 ASGI 兼容的 Web 服务器上的入口
--- wsgi.py //作为你的项目的运行在 WSGI 兼容的Web服务器上的入口
--- manage.py // 进行交互的命令行工具
2.将已创建本网站记入配置
我们的应用名称为test004,具体添加如下:
3.配置文件(数据库)
打开test004/setting.py
,这里配置关乎Django项目设置的Python模块,默认该配置文件使用SQLite作为默认数据库,,当然我们在(二)
安装了PostgreSQL作为本测试项目的数据库,需要在setting.py中对数据库进行配置,但是连接数据库只有这些配置是没有用的,还需要对应连接的python模块psycopg2
依赖包,安装命令如下:
pip install psycopg2
执行结果如下:
对应配置setting.py初始DATABASES 如下:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
对setting.py修改部分内容如下:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME':'test004',
'USER':'postgres',
'PASSWORD':'123456',
'HOST':'localhost',
'PORT':'5432',
}
}
下面我们尝试一下是否可以连接到数据库,我们执行一下命令:
python manage.py migrate
如果结果如下:
你会神奇的发现数据库test004中多了很多的表,这些表是之前自带框架中主要是认证授权系统中使用到的表,截图如下:
当你学会创建模型时可以执行该命令,自动替你创建数据库中对应的表,同时也表示数据库配置已经完成。
4. 创建应用与模型
使用Django框架,在创建模型时,要求创建一个app应用,我们使用一下命令创建一个DoctorInfo的app:
django-admin startapp DoctorInfo
执行后生成的目录结构如下:
test004
|-- test004
|-- manage.py
...
|-- DoctorInfo
| |-- migrations
| |-- __init__.py
| |-- admin.py
| |-- apps.py
| |-- models.py
| |-- tests.py
| |-- views.py
我们修改DoctorInfo/models.py代码如下:
from django.db import models
import uuid
# Create your models here.
class Doctor(models.Model):
did = models.UUIDField(primary_key=True,default=uuid.uuid4,editable=False)
realname = models.CharField(max_length=20)
professional = models.CharField(max_length=20)
class DocGoodAtInfo(models.Model):
doctor = models.ForeignKey(Doctor,on_delete=models.CASCADE) #外键
goodat = models.CharField(max_length=200)
update = models.DateTimeField('date published') #日期字段
将该应用添加到主站点中,操作如下:
INSTALLED_APPS = [
'DoctorInfo.apps.DoctorinfoConfig', #自行创建应用
'django.contrib.admin', #管理员站点
'django.contrib.auth', #认证授权系统
'django.contrib.contenttypes', #内容类型框架
'django.contrib.sessions', #会话框架
'django.contrib.messages', #消息框架
'django.contrib.staticfiles', #管理静态文件的框架
'test004',
]
执行以下命令,可以在对应数据库中创建表:
python manage.py makemigrations DoctorInfo
执行结果如下:
当我们执行命令遇到错误 ValueError: source code string cannot contain null bytes
,这属于编码问题,找到改动的文件,修改对应编码为UTF-8
5.创建超级管理员密码打开管理站点界面
记住执行命令前先进入对应目录,这里不再详细说明,我们先创建一个管理员账户密码,执行命令如下:
python manage.py createsuperuser
管理员账户密码创建完成,让我们启动服务器打开管理站点python manage.py runserver
,启动完成后,在浏览器中访问http://127.0.0.1:8000/admin
,可以看到管理站点登陆页面入口,输入我们刚刚创建的管理员账号密码
进入之后我们可以看到,截图如下:
而且通过点击Users的Change
,我们可以编辑刚刚创建的即当前登录的账号,截图如下:
6.将新创建应用的模型类加入管理站点中
我们需要编辑应用中的DoctorInfo/admin.py
from django.contrib import admin
from .models import Doctor
from .models import DocGoodAtInfo
# Register your models here.
admin.site.register(Doctor)
admin.site.register(DocGoodAtInfo)
我们刷新管理站点界面后就会发现多了两项管理内容:
我们从这里可以直接编辑数据库数据
7. 开始创建可用的视图页面第一步创建应用自己的urls.py
Django默认不会给应用自动创建urls.py,因此为了以便概述划分为应用程序的项目的整个 url 结构,最好创建自己的DoctorInfo/urls.py
,然后在主站点test004下的urls.py中引入,创建如下:
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
下一步在根URLconf文件中指定我们创建的DoctorInfo.urls
模块。在test004/urls.py
文件的urlpatterns
插入相关部分,如下
from django.contrib import admin
from django.urls import include,path
urlpatterns = [
path('DoctorInfo/',include('DoctorInfo.urls')),
path('admin/', admin.site.urls),
]
8.创建模板目录以及html文件和对应的view修改
首先我们能在DoctorInfo目录下创建一个templates目录,Django将在这个目录中查找模板文件,编写对应的DoctorInfo/views.py
from django.shortcuts import render
from .models import Doctor
# Create your views here.
def index(request):
last_doctot_list = Doctor.objects.order_by('-crtime')[:5]
context = {'last_doctot_list':last_doctot_list}
return render(request,'DoctorInfo/index.html',context)
创建DoctorInfo/templates/index.html
,完整代码如下:
<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<meta name="description" content="测试版应用首页">
<title>小应用首页</title>
<style>
</style>
</head>
<body>
<div class="top"></div>
<div class="main">
{% if last_doctot_list %}
<ul>
{% for doctor in last_doctot_list %}
<li><a href="/DoctorInfo/{{ doctor.did }}">{{ doctor.realname }} - {{ doctor.professional }}</a></li>
{% endfor %}
</ul>
{% else %}
<p>No doctor are available</p>
{% endif %}
</div>
</body>
</html>
创建完成后,我们就开始测试吧启动server,显示如下:
因为我们并没有添加对应数据,表示一张空表
9. 下面我们使用pythonshell来创建一条数据
首先进入主站点根目录下,输入命令python manage.py shell
,按照下方代码输入,这里直接使用截图显示:
然后我们再刷新页面看页面显示,截图如下:
从截图中我们看出,页面已经将刚加入数据库中的数据显示出来了