小酌Django1——Django基础
Python可以做:数据统计、爬虫、机器学习、人工智能… 还有Web开发;本文主要内容即以Python为基础进行简单Web应用开发;
目标:
- 学习Django;
- 完成项目,同时学习相关知识(边学边用,活学活用);
Django基础
- Web开发中应用的开发框架,用于快速构建一个网站;实践中多多参考文档(或2.0版本的中文文档);Web开发 需要前端技术的支持;
- 易学、开发快、插件多(如用户管理、内容管理、网站地图、RSS等常用插件)、安全(默认解决了SQL注入、跨站攻击等问题)、应用广泛(各类在线服务网站、管理系统、社交网站、计算平台);
- Python相关的开发网站框架除了Django,还有Tornado、Flask等;
Django安装
- 直接基于Python 3开发和学习Django即可;
- 使用命令:
pip install Django==3.0.8
,3.0.8是目前正是发布的最新版本;
安装成功,控制台输出:
Successfully installed Django-3.0.8 asgiref-3.2.10 sqlparse-0.3.1
现在打开Jupyter Notebook:新建一个python3的文件
# 测试Django安装情况
import django
print(django.get_version())
控制台输出:
3.0.8
安装开发版本
此外,还可以通过命令:
git clone https://github.com/django/django.git
在django目录下执行:
pip install -e ./django
这样会安装Django开发中的最新版本;
创建项目
- 项目(project):可以理解为一个网站
- 应用(application):网站中某个或几个功能的集合称为一个“应用”,网站往往由多个“应用”组成;
切换到项目文件夹下,执行命令:
django-admin startproject mysite1
或
django-admin startproject mysite1 .
会新建一个mysite1文件夹,mysite1子目录里的内容,就是我们创建的项目内容:
mysite1
manage.py
mysite1
__init__.py // 有了这个文件的存在 当前目录就变成了一个Python包(package)
asgi.py
settings.py
urls.py
wsgi.py
django-admin
创建项目时用到的django-admin.py,它是Django的任务管理命令行工具,Django安装后保存在安装目录的/bin下:/Users/huaqiang/anaconda3/lib/python3.7/site-packages/django/bin/django-admin.py
django-admin命令的帮助信息和所支持的命令行参数:
$ django-admin
Type 'django-admin help <subcommand>' for help on a specific subcommand.
Available subcommands:
[django]
check
compilemessages
createcachetable
dbshell
diffsettings
dumpdata
flush
inspectdb
loaddata
makemessages
makemigrations
migrate
runserver
sendtestemail
shell
showmigrations
sqlflush
sqlmigrate
sqlsequencereset
squashmigrations
startapp
startproject
test
testserver
运行项目
执行命令:
python manage.py runserver
报了一个小错误:
You have 17 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
执行提示命令:
python manage.py migrate
再次运行,会在本机http://127.0.0.1:8000/
启动服务,在浏览器访问即可看到网站的基本样子,要把它变成一个优秀的网站,还需要不断优化;按CTRL+C即可退出;
The install worked successfully! Congratulations!
You are seeing this page because DEBUG=True is in your settings file and you have not configured any URLs
创建应用
项目有了,网站也有了,现在需要实现网站具体的功能,在Django中,这些功能称为“应用”(application);
创建应用:
- 在当前项目目录下执行命令
ls
:会看到除了原来的2个基础文件,多了一个db.sqlite3
$ ls
db.sqlite3 manage.py mysite1
- 继续执行命令
python manage.py startapp blog
(或django-admin startapp blog
),然后执行ls
:目录中多了一个blog目录,而且目录中已经有了默认的文件和目录
$ python manage.py startapp blog
$ ls
blog db.sqlite3 manage.py mysite1
blog
__init__.py
admin.py
apps.py
migrations
__init__.py
models.py
tests.py
views.py
blog就是在项目mysite1中新建的一个应用:
- 新建应用后,Django会自动在这个应用中添加一些文件;
- 使用
rm -r blog
,可以删除blog应用;
$ rm -r blog
$ ls
db.sqlite3 manage.py mysite1
$ django-admin startapp blog
$ ls
blog db.sqlite3 manage.py mysite1
项目目录文件分析
根目录:manage.py
- 创建后自动生成该文件,它是对django-admin.py的简单封装,同样能够实现命令行操作;
- 与django-admin对比,会发现有一部分代码相同,同时manage.py还有自己特有的命令;
- 该文件不要修改也不要删除,后续会经常使用;
$ python manage.py
Type 'manage.py help <subcommand>' for help on a specific subcommand.
Available subcommands:
[auth]
changepassword
createsuperuser
[contenttypes]
remove_stale_contenttypes
[django]
check
compilemessages
createcachetable
dbshell
diffsettings
dumpdata
flush
inspectdb
loaddata
makemessages
makemigrations
migrate
sendtestemail
shell
showmigrations
sqlflush
sqlmigrate
sqlsequencereset
squashmigrations
startapp
startproject
test
testserver
[sessions]
clearsessions
[staticfiles]
collectstatic
findstatic
runserver
根目录:mysite1
- 项目的管理功能目录,虽然可以在其中输入应用部分的内容,但对于多应用的项目一般不这样做;
- 它里面的文件常用于面向整个项目进行参数配置;
settings.py
:包含了项目的初始化配置,可针对整个项目进行有关参数配置,如数据库配置、添加应用等;urls.py
:这是一个URL配置表文件,主要是将URL映射到应用程序上;- 当请求某个URL时,Django项目会根据文件中映射关系指向某个目标对象,该对象可以是某个应用中的urls.py文件,也可以是某个具体的视图函数;
- 在Django中,这个文件也被称为URLconf,这是Django非常强大的特性之一;
wsgi.py
:Web Server Gateway Interface,是Python所选择的服务器和应用标准,Django也会使用;该文件定义了我们所创建的项目都是WSGI应用;asgi.py
:“WSGI是基于HTTP协议模式的,不支持WebSocket,而ASGI的诞生则是为了解决Python常用的WSGI不支持当前Web开发中的一些新的协议标准。同时,ASGI对于WSGI原有的模式的支持和WebSocket的扩展,即ASGI是WSGI的扩展”,参考WSGI&ASGI__pycache__
:运行runserver命令后就会出现该文件夹;文件以.pyc结尾,都是编译好的文件;
根目录:blog
- 项目中所创建的应用之一;每新建一个应用,根目录下就会创建一个子目录(预制一些默认文件);
admin.py
:可在此文件中,自定义Django管理工具,如设置在管理界面能够管理的项目,或通过重新自定义与系统管理有关的类对象,向管理功能增加新的内容;apps.py
:包含对应用的配置,如为管理功能提供一个合适的应用名称;migrations
:该目录用于存储应用的数据库表结构的指令,通过这些指令可以修改和创建数据库,从而在models.py模型类和数据库表之间迁移;models.py
:这是应用的数据模型,每个Django的应用都应该有一个models.py文件,虽然文件可以为空,但不宜删除;tests.py
:此文件中可以编写测试文档 来测试应用;views.py
:重要文件,用于保存响应各种请求的函数或类;- 如果编写的是函数,则称为基于函数的视图;
- 如果编写的是类,则称之为基于类的视图;
- views.py就是保存函数或者类的视图文件;(文件名称可变,views是惯用名)
根目录:db.sqlite3
- 默认数据库文件;SQLite是Python默认安装的数据库,在Django中默认使用;
- 该文件在
./mysite/settings.py
中配置生成;
项目信息配置说明
目前只创建了应用,还未将应用注册到项目中,暂时也无法访问;
./mysite/settings.py
是主管信息注册(各类信息声明)的文件,其中主要内容说明如下:
- DEBUG:
- 值:True或False,开发中需要设置为True,表示处于开发模式,这样在测试时会显示详细的错误信息;
- 项目部署生产时,必须修改为False,避免暴露项目内部信息;
- ALLOWED_HOSTS:
- DEBUG=True时,该值可为空;
- 部署生产时,要把主域名填写到这里,才能通过域名访问本网站;
- INSTALLED_APPS:
- 重要配置项,所有应用需要写到这里才能生效;
- 默认已经有了一些配置;如
django.contrib.admin
就是针对项目后台管理的应用;可以把blog配置到这里;
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog',# 配置新创建的blog应用
]
- DATABASES:
- 数据库配置;Django支持多种数据库,如MySQL、PostgreSQL、Oracle等,默认配置的是SQLite,这也是Python标准库所支持的;相关数据库配置方式可参考官网文档;
- LANGUAGE_CODE:
- 项目语言配置,一般不用修改;示例设置为汉语
LANGUAGE_CODE='zh-hans'
;
- 项目语言配置,一般不用修改;示例设置为汉语
- TIME_ZONE:
- 设置时区,通常设置为东八区,设置为
Asia/Shanghai
;
- 设置时区,通常设置为东八区,设置为
Django的开发模式和生产模式
开发模式下:
- Django提供了简单的Web服务器功能,无需配置Apache或者Nginx等服务器,也可运行网站;
- Django会自动检测到修改的代码并重新加载,无需每次修改代码后都重启Web服务器;(增加文件需要重启)
- 运行服务的指令:
python manage.py runserver
生产模式:
- 正式部署时,需要对部分配置进行修改;
小结
- Django安装好之后,就有了djangoadmin这个默认命令,可以用
diango-admin startproject projectname
命令创建一个Django项目; - 项目是由若干个“应用”(app)组成的,实现具体功能。创建应用可以使用
python manage.py startapp appname
命令,也可以使用django-amdin startapp appname
命令; - 创建了项目和应用之后,会生成一些默认的文件,它们要么是一些默认的配置,如
settings.py
,要么是空文件,仅仅是为了占据一个位置而已,如应用里面的views.py
、models.py
等; - 每个应用都要在项目的
settings.py
文件的INSTALLED_APPS
中进行声明,告诉Django这个应用是本项目的一部分。
Django将很多默认的功能(比如用户管理功能)视为一个应用;此外,Django是一个开放的系统,任何人都可以开发第三方应用,这些第三方应用通常用于解决某个常见的问题,开发者在项目中使用第三方应用的主要目的就是节省时间、快速开发;这些第三方应用如果要在项目中使用,也要在settings.py
的INSTALLED_APPS
中注册后才能生效。