一、创建一个Django工程项目
1、创建
要进入到项目要保存的位置我选择的是E:/workspace
格式:django-admin startproject 项目名
django-admin startproject test_django
让我们看看 startproject 创造了什么
test_django/
manage.py
test_django/
__init__.py
settings.py
urls.py
wigi.py
-外部的 test_django/ 根目录只是一个容器,与他的名字无关
- manage.py: 一个命令行实用程序,允许您以各种方式与此Django项目进行交互。
- 内部 test_django/ 目录是项目的实际python包。
- test_django/__init__.py:__ 一个空文件,告诉Python该目录应该被视为Python包。
- test_django/settings.py: 此Django项目的设置/配置。
- test_django/urls.py: 这个Django项目的URL声明; 您的Django支持的站点的“目录”。
- test_django/wsgi.py: 与WSGI兼容的Web服务器的入口点,用于为您的项目提供服务.
2、启动服务器
进入到外部test_django 中
//启动:(默认的端口为8000,IP为 127.0.0.1)
python manage.py runserver
//当你遇见端口被占用错误时,只需启动服务器也指定端口和IP,格式如下:
python manage.py runserver 127.0.0.1:8001
在浏览器查看运行结果:(当你看到下图时,你已经成功了)
3、将工程在pycharm中打开运行
①对于打开工程就不用说了,打开pycharm 点击file---->open 然后找到你工程的目录打开。
②选择解释器:file —> setting ----> project —> project interpreter 选择你的解释器
③ 运行工程,你也可以打开pacharm 的Terminal 去运行工程,不过我么既然使用了可视化界面,就不想去敲命令。运行manage.py 会出现以下问题,只需添加运行参数即可。
添加运行参数:
- 选择Edit configurations
- 添加运行参数 runserver
二、创建一个子应用程序
在Django中编写的每个应用程序都包含一个遵循特定约定的Python包。Django附带了一个实用程序,可以自动生成应用程序的基本目录结构,因此您可以专注于编写代码而不是创建目录。
1、创建子应用
// python manage.py startapp 子应用程序名
python manage.py startapp book_test
执行完上面的创建应用代码,就会在你代码执行的位置创建一个book_test目录,其布局格式如下:
book_test/
__init__.py (说明book_test 是一个pyhton包)
admin.py (管理员)
apps.py
migrations/ (迁移文件)
__init__.py
models.py (模型,和数据库进行交互)
tests.py (写测试代码)
views.py (视图)
2、注册应用
在工程配置文件settings.py中,INSTALLED_APPS项保存了工程中已经注册安装的子应用,初始工程中的INSTALLED_APPS如下:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
对于1.8以前的Django注册应用,只需在INSTALLED_APPS添加应用名即可
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 添加应用
'book_test'
]
1.8之后的版本注册安装一个子应用的方法,即是将子应用的配置信息文件apps.py中的Config类添加到INSTALLED_APPS列表中。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 添加应用
'book_test.apps.BookTestConfig'
]
三、创建视图
同Flask框架一样,Django也用视图来编写Web应用的业务逻辑。
Django的视图是定义在子应用的views.py中的。
1、创建视图函数
打开子应用的 view.py 定义视图函数
from django.http import HttpResponse
def book_index(requset):
"""
book_index 视图
:param requset:包含了请求信息的请求对象,使用此对象获取请的的一些数据:请求参数,请求方式
:return: 返回相应对象
"""
# 返回相应对象,相比与flask中可以直接返回字符串,Django中不支持直接返回字符串,必须返回 一个响应对象
return HttpResponse('毁灭你,与你何干')
说明:
- 视图函数的第一个传入参数必须定义,用于接收Django构造的包含了请求数据的HttpReqeust对象,通常名为request。
- 视图函数的返回值必须为一个响应对象,不能像Flask一样直接返回一个字符串,可以将要返回的字符串数据放到一个HTTPResponse对象中。
2、创建路由
子应用创建路由
类似于flask中,给不同的应用定义蓝图。在Django中我们给我们的应用定义一个 url.py (当然这个文件的名字可以自己起,但我们习惯用与工程的路由文件相同的名字)文件保存此应用的路由信息。
from django.conf.urls import url
from . import views
# urlpatterns是被django自动识别的路由列表变量
urlpatterns = [
# 每个路由信息都需要使用url函数来构造
# url(路径, 视图)
url(r'^book_index/$', views.book_index),
]
在总工程中添加路由
类似于flask中,要将应用的蓝图注册到app中一样,Django要将应用添加到总工程的路由中。
- flask注册蓝图
# 创建蓝图
order_blue = Blueprint('order',__name__,url_prefix='/order')
# APP中注册蓝图
app.register_blueprint(order_blue)
- Django添加应用路由
from django.conf.urls import url,include
from django.contrib import admin
from django.urls import path
urlpatterns = [
# django 默认包含的管理路由
path('admin/', admin.site.urls),
# 将子应用的路由添加到总工程中
url(r'^book_test/',include('book_test.urls'))
]
url函数
- 使用include来将子应用users里的全部路由包含进工程路由中;include函数除了可以传递字符串之外,也可以直接传递应用的urls模块如
url(r’^book_test/’, include(book_test.urls)), # 添加应用的路由
- r’^book_test/’ 决定了book_test子应用的所有路由都已/book_test/开头,如我们刚定义的视图index,其最终的完整访问路径为/book_test/index/。
运行项目,访问/book_test/index/
四、配置、静态文件
- BASE_DIR
django 为我们提供了一个一个项目的文件路径,setting.py 的全局变量
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
- 本地语言与时区
Django支持本地化处理,即显示语言与时区支持本地化。本地化是将显示的语言、时间等使用本地的习惯,这里的本地化就是进行中国化,中国大陆地区使用简体中文,时区使用亚洲/上海时区,注意这里不使用北京时区表示。初始化的工程默认语言和时区为英语和UTC标准时区。
# 默认语言,美国英语
LANGUAGE_CODE = 'en-us'
# 默认时区
TIME_ZONE = 'UTC'
修改成汉语和中国时区
# 中文
LANGUAGE_CODE = 'zh-hans'
# 中国时区:亚太上海时区
TIME_ZONE = 'Asia/Shanghai'
- 静态文件配置
# 静态文件url访问路由
STATIC_URL = '/static/'
# 静态文件的保存位置:项目的根目录/static_files 中
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static_files'),
]
app应用配置:
class BookTestConfig(AppConfig):
name = 'book_test'
verbose_name = '图书管理'
AppConfig.name属性表示这个配置类是加载到哪个应用的,每个配置类必须包含此属性,默认自动生成。
AppConfig.verbose_name 属性用于设置该应用的直观可读的名字,此名字在Django提供的Admin管理站点中会显示,
其实还有许多其他配置,这里就不说明了,等到将具体模块时,再说明。