Django项目的搭建(超详细版)

一、 windows环境下创建django工程

1.1、创建虚拟环境

在使用Flask框架时,项目工程目录的组织与创建是需要我们自己手动创建完成的。
在django中,项目工程目录可以借助django提供的命令帮助我们创建。以下命令都是在windows的cmd窗口创建

  1. 创建django项目的虚拟环境,名字就叫django_env_01吧,如何安装虚拟环境,请参考python虚拟环境的搭建
mkvirtualenv django_env_01
  1. 切换到当前创建的虚拟环境,激活
workon django_env_01
  1. 安装django,此处的版本号选择1.11,因为1.11和2.2为LTS(官方长期支持版本),秉着一般不选择最新版的原则。在这里插入图片描述
pip install django==1.11

查看是否安装成功

(django_env_01) D:\>pip list
Package              Version
-------------------- -------
amqp                 2.5.2
asgiref              3.2.7
billiard             3.6.3.0
celery               4.4.2
Django               1.11

1.2、创建工程

创建工程的命令为:
django-admin startproject 工程名称
例如:想要在D盘的code目录中创建一个名为demo的项目工程,先要切换到D盘的code目录中,可执行如下命令:
D:
cd code


(django_env_01) C:\Users\Administrator>D:

(django_env_01) D:\>cd code

(django_env_01) D:\code>
django-admin startproject demo

执行后,会多出一个新目录名为demo如下,即为新创建的工程目录。

(django_env_01) D:\code>django-admin startproject demo

(django_env_01) D:\code>dir
 驱动器 D 中的卷是 文档
 卷的序列号是 0006-A235

 D:\code 的目录

2020/10/24  21:44    <DIR>          .
2020/10/24  21:44    <DIR>          ..
2020/10/24  21:44    <DIR>          demo
               0 个文件              0 字节
               3 个目录 57,446,785,024 可用字节

(django_env_01) D:\code>

1.3、项目目录说明

查看创建的工程目录,输入tree /F /A可以看目录结构。 结构如下

(django_env_01) D:\code> tree /F /A
卷 文档 的文件夹 PATH 列表
卷序列号为 0006-A235
D:.
\---demo
    |---manage.py
    |
    \---demo
           |--- settings.py
           | ---urls.py
           | ---wsgi.py
           |---__init__.py


(django_env_01) D:\code>

与项目同名的目录,此处为demo。
settings.py 是项目的整体配置文件。
urls.py 是项目的URL配置文件。
wsgi.py 是项目与WSGI兼容的Web服务器入口。
manage.py 是项目管理文件,通过它管理项目。


1.4、运行开发服务器

在开发阶段,为了能够快速预览到开发的效果,django提供了一个纯python编写的轻量级web服务器,仅在开发阶段使用。在这个服务器中,在需要的情况下会对每一次的访问请求重新载入一遍 Python 代码。所以你不需要为了让修改的代码生效而频繁的重新启动服务器。然而,一些动作,比如添加新文件,将不会触发自动重新加载,这时你得自己手动重启服务器。

  1. 先cd到demo中取,运行服务器命令如下:
python manage.py runserver ip:端口

或:

python manage.py runserver
  1. 可以不写IP和端口,默认IP是127.0.0.1,默认端口为8000。
    为了方便起见,我们用pychram打开刚创建的项目,注:是用pycharm打开code文件夹下的第一个demo文件夹,为项目的根目录。
    在这里插入图片描述

  2. 切换虚拟环境中的解释器(告诉pycharm你用的是哪个虚拟环境)。
    依次点击 File—>settings---->project—>python Interpreter
    在这里插入图片描述

  3. 点击小齿轮,点击Add出现如下界面
    在这里插入图片描述
    在这里插入图片描述

  4. 打开pycharm的Terminal,输入 python manage.py runserver启动程序,可以看到如下语法错误(如果你用的python3.6之前的版本,则不存在此问题)

    from django.contrib.admin.filters import (
  File "D:\Documents\Python_virtualenv\django_env_01\lib\site-packages\django\contrib\admin\filters.py", line 10, in <module>
    from django.contrib.admin.options import IncorrectLookupParameters
  File "D:\Documents\Python_virtualenv\django_env_01\lib\site-packages\django\contrib\admin\options.py", line 12, in <module>
    from django.contrib.admin import helpers, widgets
SyntaxError: Generator expression must be parenthesized (widgets.py, line 151)

这是因为,当前用的是Python3.8版本,而Python3.7版本之后就与django1.11不兼容,diango2之后版本修复了这个问题(其实是多了一个逗号)。方式一,升级django 。方式2,改源码。这里选择改源码,方法如下:
  1. 直接右键运行manager.py文件,可以看到如下报错,

在这里插入图片描述
在这里插入图片描述
将末尾逗号去掉即可。
然后从新打开终端,输入python manage.py runserver

(django_env_01) D:\code\demo>python manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).

You have 13 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.
October 24, 2020 - 23:15:27
Django version 1.11, using settings 'demo.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

可以看到,完美启动,在浏览器输入127.0.0.1:8000,如下:
在这里插入图片描述

也可以python manager --help 查看更多选项

Python manager --help

django默认工作在调式Debug模式下,如果增加、修改、删除文件,服务器会自动重启。按ctrl+c停止服务器。


1.5、直接右键运行manager.py文件就能启动项目的配置方式

在这里插入图片描述
点击 Edit Configurations ,填入如下
在这里插入图片描述
参数说明:

  1. 只填runserver 表示只能用127.0.0.1:8000访问
    局域网下访问如下2,3的方式配置:
    一定要在settings中修改 ALLOWED_HOSTS = [’*’]
  2. ==填 runserver 本机ip:8000,表示只能用本机ip:8000访问,==例如 runserver 192.168.0.105:8000
  3. 填runserver 0.0.0.0:8000,表示可以用127.0.0.1:8000访问,也可以用本机ip:8000访问
    在这里插入图片描述

1.6、创建子应用。

在Web应用中,通常有一些业务功能模块是在不同的项目中都可以复用的,故在开发中通常将工程项目拆分为不同的子功能模块,例如登录模块、注册模块、用户模块等等。各功能模块间可以保持相对的独立,在其他工程项目中需要用到某个特定功能模块时,可以将该模块代码整体复制过去,达到复用。可以达到分层解耦,易扩展和维护。在Flask框架中也有类似子功能应用模块的概念,即蓝图Blueprint。
Django的视图编写是放在子应用中的。

  1. 创建子目录
    在django中,创建子应用模块目录仍然可以通过命令来操作,即:
python manage.py startapp 子应用名称

manage.py 为上述创建工程时自动生成的管理文件。
例如,在刚才创建的demo工程中,想要创建一个登录login子应用模块,可执行:

cd code/demo
python manage.py startapp login
# 创建login子应用
(django_env_01) D:\code\demo>python manage.py startapp login

# 查看文件目录树
(django_env_01) D:\code\demo>tree /F
D:.---db.sqlite3
│---manage.py       
│        
├─demo
│  │---settings.py
│  │---urls.py
│  │---wsgi.py
│  │---__init__.py
│                 
│
└─login
    │  admin.py
    │  apps.py
    │  models.py
    │  tests.py
    │  views.py
    │  __init__.py
    │
    └─migrations
          | __init__.py

执行后,可以看到工程目录中多出了一个名为login的子目录。

  1. 子应用目录说明
    • admin.py 文件跟网站的后台管理站点配置相关。
    • apps.py 文件用于配置当前子应用的相关信息。
    • migrations 目录用于存放数据库迁移历史文件。
    • models.py 文件用户保存数据库模型类。
    • tests.py 文件用于开发测试用例,编写单元测试。
    • views.py 文件用于编写Web应用视图。
  2. 注册安装子应用
    创建出来的子应用目录文件虽然被放到了工程项目目录中,但是django工程并不能立即直接使用该子应用,需要注册安装后才能使用。
    在工程配置文件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',
]

注册安装一个子应用的方法的本质,是将子应用的配置信息文件apps.py中的Config类添加到INSTALLED_APPS列表中。
例如,将刚创建的login子应用添加到工程中,可在INSTALLED_APPS列表中添加’login.apps.LoginConfig’。其实也可以直接写创建的子应用名即可,例如直接写‘login’

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'login.apps.LoginConfig'
]

1.7、创建视图

同Flask框架一样,Django也用视图来编写Web应用的业务逻辑。Django的视图是定义在子应用的views.py中的。

  1. 创建
    打开刚创建的login模块,在views.py中编写视图代码。
from django.http import HttpResponse

def index(request):
    """
    index视图
    :param request: 包含了请求信息的请求对象
    :return: 响应对象
    """
    return HttpResponse("hello world!")

说明:

视图函数的第一个传入参数必须定义,用于接收Django构造的包含了请求数据的HttpReqeust对象,通常名为request。
视图函数的返回值必须为一个响应对象,不能像Flask一样直接返回一个字符串,可以将要返回的字符串数据放到一个HTTPResponse对象中。

  1. 定义子路由URL
    在子应用中新建一个urls.py文件用于保存该应用的路由。新建urls.py文件
    在这里插入图片描述
    在login/urls.py文件中定义路由信息。
from django.conf.urls import url

from . import views

# urlpatterns是被django自动识别的路由列表变量
urlpatterns = [
    # 每个路由信息都需要使用url函数来构造,django2以上版本用path   from django.urls import path
    # url(路径, 视图)
    url(r'^index/$', views.index),
]
  1. 工程总路由demo/urls.py中添加子应用的路由数据。

from django.conf.urls import url, include
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),  # django默认包含的

    # 添加
    url(r'^login/', include('login.urls')), 
]

说明:

  • 使用include来将子应用users里的全部路由包含进工程路由中;
  • r’^login/’ 决定了users子应用的所有路由都已/users/开头,如我们刚定义的视图index,其最终的完整访问路径为/login/index/。
  • include函数除了可以传递字符串之外,也可以直接传递应用的urls模块,如
from django.conf.urls import url, include
from django.contrib import admin
import login.urls  # 先导入应用的urls模块

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    # url(r'^login/', include('login.urls')),
    url(r'^login/', include(login.urls)),  # 添加应用的路由
]
  1. 启动运行
    重新启动django程序python manage.py runserver
    在浏览器中输入网址127.0.0.1:8000/login/index/ 可看到返回的信息
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_46090675/article/details/109266014