venv
目录并建立虚拟环境,使用 IDE 自带的终端也会默认激活虚拟环境涉及到的知识:css
直接采用 PyCharm 初始化一个 Django 项目html
. ├── db.sqlite3 # 默认的 sqlite 数据库文件 ├── manage.py # 启动脚本 ├── mxoline # 主要配置存放路径 │ ├── __init__.py │ ├── settings.py # 全局配置 │ ├── urls.py # url 配置文件 │ └── wsgi.py └── templates # html 文件模板
$ django-admin startapp message
生成的 app 结构:python
└── message ├── __init__.py ├── admin.py ├── apps.py ├── migrations │ └── __init__.py ├── models.py ├── tests.py └── views.py
防止项目过大的时候,app 过多难以管理mysql
. ├── apps # app 集中存放,防止当项目规模变大难以管理 │ └── message # 新建的 message app ├── db.sqlite3 # 默认的 sqlite 数据库 ├── log # 存放 log 日志 ├── manage.py # 启动脚本 ├── media # 用户上传的媒体文件 ├── mxoline # 项目主要配置目录 │ ├── __init__.py # 初始化文件 │ ├── __pycache__ # │ ├── settings.py # django 框架全局配置文件 │ ├── urls.py # url 映射关系配置文件 │ └── wsgi.py # ├── static # 静态资源文件 ├── templates # 模板存放目录 └── venv # PyCharm 建立的虚拟 Python 环境 ├── bin ├── include ├── lib ├── pip-selfcheck.json └── pyvenv.cfg
每次建立一个 App,咱们都须要在 settings.py
中进行注册:git
# {BASE_DIR}/mxonline/settings.py INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'apps.message' ]
能够看到在列表中添加了 message
项目。github
默认使用的是 sqlite
,咱们在这里使用 mysql
(有坑预警,昨天晚上查了很久)正则表达式
进入 setting
文件,默认的配置状况是这个样子的:sql
# {BASE_DIR}/mxonline/settings.py DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } }
修改为这个样子:shell
# {BASE_DIR}/mxonline/settings.py DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # 使用mysql引擎 'NAME': 'test_django', # 数据库名称 'USER': 'root', # 用户 'PASSWORD': 'root', # 密码 'HOST': '127.0.0.1' # 地址 } }
而后须要安装 mysql
的驱动,mac 下会出现装不上的状况,具体能够参考这里,自行修改 mysql-config
文件。数据库
# 这里是 mac 的驱动,使用Windows 同窗对不起啊。 $ pip install mysqlclient
Windows 上须要自行下载 mysql-python 驱动,好像也挺多坑的,按下不表。
在 Pycharm
中,点击 Tools
中的 Run manage.py Task
,而后就能够在里边快捷的运行 manage.py
提供的各类脚本了。
若是在命令行中运行的话,须要在下面的命令前边加上 python manage.py
$ makemigrations
$ migrate
输出大概以下:
bash -cl "/Users/zhoubao/workplace/python/mxoline/venv/bin/python /Applications/PyCharm.app/Contents/helpers/pycharm/django_manage.py migrate /Users/zhoubao/workplace/python/mxoline" (B[mTracking file by folder pattern: migrations Operations to perform: Apply all migrations: admin, auth, contenttypes, sessions Running migrations: Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK
能够登陆本身的 mysql 数据库查看一下是否是生成了一堆数据表:
$ mysql -uroot -proot $ change test_django $ show tables;
我这里的输出是这个样子的:
+----------------------------+ | Tables_in_test_django | +----------------------------+ | auth_group | | auth_group_permissions | | auth_permission | | auth_user | | auth_user_groups | | auth_user_user_permissions | | django_admin_log | | django_content_type | | django_migrations | | django_session | +----------------------------+ 10 rows in set (0.00 sec)
固然可使用 Navicat 进行查看,这里就不截图了。
runserver
而后能够访问 127.0.0.1:8000,查看是否进入了 django 的默认欢迎页面。
先在 templates
中添加一个 form.html
文件(也算是懒到家了,就直接用 curl 拉取了)
$ cd templates $ curl -L https://raw.githubusercontent.com/missxiaolin/python-django/1860df7790a5daefafd2c052c1e3afedbbc48151/templates/mesage_form.html > message_form.html
在这里指定 view 和 template 的关系,默认的 templates 目录就是 {BASE_DIR}/templates
# {BASE_DIR}/apps/message/views.py from django.shortcuts import render def getForm(request): return render(request, 'message_form.html')
目的是将刚才的 form.html
页面呈现出来。
进入生成项目的时候生成的和项目名称相同的那个目录下边的 urls.py
文件中,和 settings.py
文件同级,文件已经配置好了 /admin
路由:
# {BASE_DIR}/mxonline/urls.py from django.contrib import admin from django.urls import path urlpatterns = [ path('admin/', admin.site.urls), ]
须要添加本身的配置项,这里和 1.9.8 不太同样,不须要使用正则,正则对应的是 re-path
:
# {BASE_DIR}/mxonline/urls.py from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('', include('message.urls')) ]
这里的处理方式和教程中的不太同样,首先教程基于的是 Django 的 1.9.8 版本,配置路由须要使用到正则表达式相关的知识。其次教程在这里对 app 中的 url 进行了处理,我选择的方式则是在 app 本身的目录中维护本身的 url。
$ cd apps/message $ touch urls.py
# {BASE_URL}/apps/message/urls.py from django.urls import path from . import views urlpatterns = [ path('', views.getForm, name="go_form") ]
在这里能够指定一个 name
参数,这个参数在后边会很是有用,由于在 template
中能够经过 name
来指定 url
。
在配置完成 url 以后,运行 runserver
以后(或者在命令行中运行 python manage.py runserver
),会报错:
ModuleNotFoundError: No module named 'message'
意思是找不到名字叫 message
的这个模块。
由于咱们的 message
app 以前已经被咱们放到了 apps
目录下,因此咱们的解决方法会有两种:
若是不想要修改 settings.py
的话,咱们在每次引用 apps
下面的应用的话,须要指定路径。因此修改文件以下:
# {BASE_DIR}/mxonline/urls.py from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('', include('apps.message.urls')) ]
这样虽然能用,可是每次都须要写 apps
,不太方便。
这样 Django 就会在 apps
中去寻找 message
模块(app)了:
# {BASE_DIR}/mxonline/settings.py import sys sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))
这里我选择的是第二种处理方式。
这样咱们点击进去 127.0.0.1:8000 就应该能看到 message_form.html
页面文件了。
在进入页面的时候,咱们会发现 css 文件的路径不正确,因此须要在 settings.py
文件中设置 static
路径。
静态资源路径能够有多个,因此这里使用一个列表进行配置:
# {BASE_DIR}/mxonline/settings.py STATICFILES_DIRS = [ os.path.join(BASE_DIR,'static') ]
再次进入 127.0.0.1:8000,完美~
如今只涉及到了项目的配置和一些基础的配置,没有涉及到 Django 请求从开始到完成的任何内容。下篇教程将集中进行记录。