Featured image of post 学习《Django完整初学者指南》的笔记1

学习《Django完整初学者指南》的笔记1

前言

本文针对"A Complete Beginner’s Guide to Django“系列文章进行学习,所做的笔记。

安装python环境

文中使用Virtualenv进行Python虚拟环境的安装,我这里使用pipenv进行Python环境的安装。

安装并配置pipenv

1
2
3
4
$ brew install python3  # 安装Python3
$ python3 -m pip install --upgrade --force-reinstall pip  # 强制安装/重新安装pip
$ pip3 install pipenv --user  # 在个人目录下安装pipenv
$ export PATH="${HOME}/Library/Python/3.7/bin:$PATH"  #设置环境变量

在项目目录通过pipenv新建python环境

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
$ cd ~/Workspace/myproject   # 到项目目录
$ pipenv install --three   # 这里我们新建python3版本的虚拟环境
$ pipenv shell  # 切换到新建的python环境

(myproject-Vk5xbkXh)     # 如果有这个带括号的字符串,说明已经切换到了新建的python环境。
                         # 这个字符串是python虚拟环境的目录名,
                         # 是本项目目录名加上随机的字符串组成的。 
$ which python
/Users/codepanda/.local/share/virtualenvs/myproject-Vk5xbkXh/bin/python
# python已经使用的是新建的python虚拟环境了

此时在项目的根目录会生成 PipfilePipfile.lock 两个文件,这连个是社区拟定的依赖管理文件,用于替代过于简陋的 requirements.txt 文件。

安装Django包

1
$ pipenv install Django==2.2  # 安装指定版本的Django (2019年4月12日更新至2.2)

新建Django项目

新建一个Django项目

1
$ django-admin startproject myproject 

此时的目录结构是:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
myproject                     # 项目上级目录
├── Pipfile                   # pipenv包依赖管理文件
├── Pipfile.lock              # pipenv包依赖管理文件
└── myproject                 # 项目目录
    ├── manage.py
    └── myproject
        ├── __init__.py
        ├── settings.py
        ├── urls.py
        └── wsgi.py

初始项目中部分文件的作用

  • manage.pydjango-admin命令行工具的快捷方式。它用于运行与我们项目相关的管理命令。我们将使用它来运行开发服务器,运行测试,创建迁移等等。

  • __init__.py:上级文件夹是一个python包。

  • settings.py:包含了所有的项目配置。

  • urls.py:负责映射我们项目中的路由和路径。

  • wsgi.py:用于部署的简单网关接口。

运行项目

1
2
3
4
$ cd myproject        # 切换到项目中,manage.py文件所在的文件
$ pwd
/home/codepanda/Workspace/myproject/myproject
$ python manage.py runserver   # 运行项目

在浏览器中输入 http://127.0.0.1:8000 可以看到项目首页

image-20190412115508016

Django Apps

Django中的两个概念 appproject :

  • app: 应用,完成某件事情的Web应用程序。
  • project: 项目,配置和应用程序的集合。一个项目可以由多个应用程序或一个应用程序组成。

新建一个应用

1
$ python manage.py startapp boards

此时,项目的目录结构

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
myproject
├── Pipfile
├── Pipfile.lock
└── myproject
    ├── boards
    │   ├── __init__.py
    │   ├── admin.py
    │   ├── apps.py
    │   ├── migrations
    │   │   └── __init__.py
    │   ├── models.py
    │   ├── tests.py
    │   └── views.py
    ├── db.sqlite3
    ├── manage.py
    └── myproject
        ├── __init__.py
        ├── settings.py
        ├── urls.py
        └── wsgi.py
  • migrations:用于存储models.py文件变更引起的数据库变更的信息,保持数据库和models.py的同步。
  • admin.py:django内置的应用Django Admin的配置文件。
  • apps.py:应用本身的配置文件。
  • models.py:定义应用程序数据实例的文件。MTV中的M。
  • tests.py:用于编写当前应用单元测试的文件。
  • views.py:处理Web应用程序请求(request)/响应(resopnse)的文件。MTV中的V。

将新建的 app 加入到项目中

settings.py

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    
    'boards.apps.BoardsConfig',   # 加入新应用
]

编写简单的应用

添加新的视图

views.py

1
2
3
4
from django.http import HttpResponse

def home(request):
    return HttpResponse('Hello, World!')

将视图view和url链接起来

urls.py

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
from django.urls import path # Django 1.* 为 from django.conf.urls import url
# Django 2.* 若需要使用正则表达式,需要引入 re_path, 相当于 1.* 版本的 url
# from django.urls import re_path 
from django.contrib import admin

from boards import views

urlpatterns = [
    # Django 1.* URL匹配字符串使用正则表达式
    # url('^$', views.home, name='home'), 
    # Django 2.* 若要使用正则匹配URL
    # re_path('^$', views.home, name='home'),
    path('', views.home, name='home'),     # 将视图views.home,和网站根目录链接起来
    path('admin/', admin.site.urls),
]

运行项目

1
$ python manage.py runserver

打开网站

QQ20180925-131251@2x

comments powered by Disqus
Built with Hugo
主题 StackJimmy 设计