django从入门到入坑(一)
当入坑python后,逐步开始了解python的web框架,由于django框架的大而全的特性,于是选择了此框架并开始学习。
-
django的安装
选择的python3.7版本,加上django2.2框架。(建议不采用比较新的版本)
直接使用pip install安装django时,往往是安装的最新版本,建议进行降级。pip install django==2.2
-
django创建新项目
(1)命令行创建新项目 将cmd定位到你想要保存的位置,输入命令创建新项目,注意命名的时候不要采用django或test等关键词,容易产生不必要的麻烦。
django-admin startproject mysite
(2)pycharm中创建新项目
此处注意勾选inherit global site-packages,选择global变量,这样会寻找你已经安装的固定版本。如果不选择,pycharm会在后台默默的给你安装最新版本。 -
新项目的介绍
全新项目框架大致目录如下:mysite/ manage.py mysite/ __init__.py settings.py urls.py wsgi.py
各文件和目录解释:
-
外层的mysite/目录与Django无关,只是你项目的容器,可以任意重命名。
-
manage.py:一个命令行工具,用于与Django进行不同方式的交互脚本,非常重要!
-
内层的mysite/目录是真正的项目文件包裹目录,它的名字是你引用内部文件的包名,例如:mysite.urls。
-
mysite/init.py:一个定义包的空文件。
-
mysite/settings.py:项目的主配置文件,非常重要!
-
mysite/urls.py:路由文件,所有的任务都是从这里开始分配,相当于Django驱动站点的内容表格,非常重要!
-
mysite/wsgi.py:一个基于WSGI的web服务器进入点,提供底层的网络通信功能,通常不用关心。
-
启动服务器
此处开始的是本地服务器,直接挂载于127.0.0.1,默认是8080端口,但由于我的8080端口被apache占用,所以改用其他端口。python manege.py runserver 2333
然后通过浏览器进入127.0.0.1:2333,会发现一个好看的页面。
-
创建第一个app
在 Django 中,每一个应用(app)都是一个 Python 包,并且遵循着相同的约定。Django 自带一个工具,可以帮你生成应用的基础目录结构。app应用与project项目的区别:
一个app实现某个功能,比如博客、公共档案数据库或者简单的投票系统; 一个project是配置文件和多个app的集合,这些app组合成整个站点; 一个project可以包含多个app; 一个app可以属于多个project!
app的存放位置可以是任何地点,但是通常都将它们放在与manage.py脚本同级的目录下,这样方便导入文件。
进入mysite项目根目录,确保与manage.py文件处于同一级,输入下述命令:python manage.py startapp polls
polls的目录结构:
polls/ __init__.py admin.py apps.py migrations/ __init__.py models.py tests.py views.py
-
编写第一个视图
打开mysite/polls/views.py,编写第一个视图:from django.http import HttpResponse def index(request): return HttpResponse("Hello, world. You're at the polls index.")
编写好view之后,需要编写urlconf,也就是路由路径,在django框架中只更改mysite/polls/urls.py:
from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), ]
接下来,在项目的主urls.py文件中添加urlpattern条目,指向我们刚才建立的polls这个app独有的urls文件,这里需要导入include模块:
from django.contrib import admin from django.urls import include, path urlpatterns = [ path('polls/', include('polls.urls')), path('admin/', admin.site.urls), ]
最后打开127.0.0.1:2333/polls/,此处可以看到新的页面,会在网页中看到一句话:“Hello, world. You’re at the polls index.”
include语法相当于多级路由,它把接收到的url地址去除与此项匹配的部分,将剩下的字符串传递给下一级路由urlconf进行判断。
include的背后是一种即插即用的思想。项目根路由不关心具体app的路由策略,只管往指定的二级路由转发,实现了应用解耦。app所属的二级路由可以根据自己的需要随意编写,不会和其它的app路由发生冲突。app目录可以放置在任何位置,而不用修改路由。这是软件设计里很常见的一种模式。
建议:除了admin路由外,尽量给每个app设计自己独立的二级路由。 -
数据库的导入
打开mysite/settings.py配置文件,这是整个Django项目的设置中心。Django默认使用SQLite数据库,因为Python源生支持SQLite数据库,所以你无须安装任何程序,就可以直接使用它。当然,如果你是在创建一个实际的项目,可以使用类似PostgreSQL的数据库,避免以后数据库迁移的相关问题。#修改mysite/settings.py中的DATABASES字典 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } }
如果你想使用其他的数据库,请先安装相应的数据库操作模块,并将settings文件中DATABASES位置的’default’的键值进行相应的修改,用于连接你的数据库。其中:
-
ENGINE(引擎):可以是django.db.backends.sqlite3、django.db.backends.postgresql、django.db.backends.mysql、django.db.backends.oracle,当然其它的也行。
-
NAME(名称):类似Mysql数据库管理系统中用于保存项目内容的数据库的名字。如果你使用的是默认的SQLite,那么数据库将作为一个文件将存放在你的本地机器内,此时的NAME应该是这个文件的完整绝对路径包括文件名,默认值os.path.join(BASE_DIR, ’db.sqlite3’),将把该文件储存在你的项目目录下。
让我们期待下一篇博客,望各位指正不对的部分。