本文章是跟着官方文档的一个简单投票系统示例来了解Django的基础架构。里面主要为官方文档中的东西,有少数部分加上自己的理解和知识点的解释。
这个投票应用程序包括两个部分:
-- 对外展示的查看和投票的公共站点(相当于web端)
-- 对内添加、修改和删除投票信息的管理站点(相当于后台管理)
创建项目
示例代码在本机存放位置为:D:\XYFiles\GiteeSpaces\Personal_route\study_djan
同时,代码会同步到Gitee()上
编写代码使用VSCode,基本操作都会在里面实现
在VSCode的终端cd到study_djan目录下,运行以下命令创建Django项目
django-admin startproject mysite
在执行完成后,我们可以看到左侧的目录栏会多出几个文件
我们来简单解释一下这些文件的作用
mysite/ # 根目录为项目名称,可以按照项目自行更
manage.py # 用于管理Django的命令行工具,可以通过这个文件进行启动django
mysite/ # Python包,后面在文件中引用时需要使用的,例如:mysite.urls
__init__.py # 空文件,不做解释
settings.py # Django项目配置文件
urls.py # Django项目的URL声明,也就是路由,通过web访问路径来判断转发到相对应的模块
asgi.py # ASGI兼容的web服务入口
wsgi.py # WSGI兼容的web服务入口
当创建一个项目之后,可以通过运行访问来测试一下,需要进入manage.py同级目录运行
python manage.py runserver 0.0.0.0:8000
当使用浏览器访问时(127.0.0.1:8000),可以从网页看到Django的欢迎页面
创建应用
项目 VS 应用
项目和应用有什么区别?应用是一个专门做某件事的网络应用程序——比如博客系统,或者公共记录的数据库,或者小型的投票程序。项目则是一个网站使用的配置和应用的集合。项目可以包含很多个应用。应用可以被很多个项目使用。
修改数据库
在创建应用之前,先将Django默认数据库db.sqlite3修改为常用的数据库MySQL
修改mysite/setting.py
在修改前后,我们需要在数据库中先创建
django_local_win
库
...
DATABASES = {
'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': BASE_DIR / 'db.sqlite3',
'ENGINE': 'django.db.backends.mysql', # 数据库引擎
'NAME': 'django_local_win', # 数据库名称
'HOST': '127.0.0.1', # 数据库地址,本机 ip 地址 127.0.0.1
'PORT': 3306, # 端口
'USER': 'root', # 数据库用户名
'PASSWORD': 'rootroot', # 数据库密码
}
}
...
修改mysite/__init__.py
# mysite/__init__.py初始为空,需要添加以下内容才能正常使用MySQL
import pymysql
pymysql.install_as_MySQLdb()
在数据库中
类名对应 ---> 数据库中的表名
类属性对应 ---> 数据库里的字段
类实例对应 ---> 数据库表里的一行数据
投票应用
在mysite/manage.py
目录下创建一个应用
python manage.py startapp polls
再创建之后一样会和项目一样创建出几个文件,后面会解释一下各个文件的作用
polls/
migrations/
__init__.py
__init__.py
admin.py
apps.py
models.py
tests.py
views.py
创建视图
编写mysite/polls/view.py
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def index(request):
return HttpResponse("Hellow Wrold!. You're at the polls index.")
创建URLconf
创建完视图之后,需要有路径指定到视图的位置,所以我们需要在polls里创建一个urls.py,即mysite/polls/urls.py
,并写入以下内容
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index')
]
在polls中设置了URLconf,但是我们访问时是从manage.py进入的,也就是我们要在mysite
中也要设置一条来指定到polls/urls.py
中
from django.contrib import admin
from django.urls import include,path
urlpatterns = [
path('polls/', include('polls.urls')),
path('admin/', admin.site.urls),
]
关于
django.urls中的include
函数
include()
允许引用其它 URLconfs。每当 Django 遇到include()
时,它会截断与此项匹配的 URL 的部分,并将剩余的字符串发送到 URLconf 以供进一步处理。我们设计
include()
的理念是使其可以即插即用。因为投票应用有它自己的 URLconf(polls/urls.py
),他们能够被放在 "/polls/" , "/fun_polls/" ,"/content/polls/",或者其他任何路径下,这个应用都能够正常工作。当包括其它 URL 模式时你应该总是使用
include()
,admin.site.urls
是唯一例外。
此时我们再次运行python manage.py runserver 0.0.0.0:8000
,我们在网页浏览127.0.0.1:8000/polls
,可以看到