欢迎查看本系列的其他文章:
官网下载最新版的python(至少3.0+),按照提示安装
安装yapf,一款Google出品的python文件自动格式化工具
pip install yapf
打开Emacs
M+x list-packages
列出所有安装包install py-yapf
,py-yapf会在保存python文件是自动调用yapf调整格式install elpy
,elpy是emacs下一个python开发环境包,提供了语法高亮,自动补全等特性要是不喜欢用命令行写代码,IDE推荐使用PyCharm,学生邮箱还能申请免费使用JetBrain全家桶。
在利用pip安装Django之前,为了保持我们电脑开发环境的整洁(和方便),我们先创建一个新的文件夹,并创立一个新的python3虚拟环境
mkdir testDjango
cd testDjango
python3 -m venv venv
激活虚拟环境(取消的话,deactivate
)
source venv/bin/activate
输入python --version
查看版本,应该显示的是python3.0+版本
利用pip安装Django
pip install django
安装完成之后,进入python,输入一下指令
import django
print(django.get_version())
或者直接命令行输入
django-admin --version
能正常输出版本号,即Django安装成功
这部分会带领你一步步的建立你的第一个Django项目
python -m django --version
django-admin startproject miniTaobao
利用tree指令(没有的话用brew或者apt安装一下)查看目录,会看到如下的结构:
.
├── manage.py
└── miniTaoBao
├── __init__.py
├── asgi.py
├── settings.py
├── urls.py
└── wsgi.py
manage.py
: 一个命令行工具,让你与Django
进行交互(如启动server或者新建App)import miniTaobao.urls
)miniTaoBao/__init__.py
: 一个空文件,用于告诉python这个目录应被识别为一个包miniTaoBao/settings.py
: 设置/配置Django项目的地方miniTaoBao/urls.py
: 该Django项目的URL声明,可以简单的理解为一个该工程支持的所有url的表格首先进入miniTaobao/settings.py
文件修改一下配置,找到ALLOWED_HOSTS
,添加0.0.0.0
。
然后运行以下指令
python manage.py runserver 0.0.0.0:8000
或者可以简写为python manage.py runserver 0:8000
这时候你可能会看到这样的红色字提醒
You have 17 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.
暂时不用理解是什么,单纯的按照他说的,运行一下python manage.py migrate
,然后重新运行一下。
此时打开浏览器,输入0.0.0.0:8000
,你应该可以看到django成功运行的标志
NOTE:使用0.0.0.0使得其他电脑也可以连接到你的服务器(前提你的电脑公网可见的话),127.0.0.1则只接受本地连接
django默认生成的是使用sqlite作为后端数据库的,这里我们改用PostgreSQL作为我们的数据库。因为sqlite只能本地访问,而postgresql是支持通过多台机器通过网络连接的,而且开源免费,功能也更加强大(具体配置可看前一篇文章)。
打开miniTaobao/settings.py
,找到DATABASES
,修改为如下
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'testDB',
'USER': 'postgres',
'PASSWORD': 'postgres',
'HOST': '127.0.0.1',
'PORT': '5432',
}
}
记得安装postgres的相关python包(否则可能会看到类似错误Error loading psycopg2 module: No module named 'psycopg2'
)
pip install psycopg2
运行程序,成功运行的话,证明切换数据库成功
常见问题
psycopg2-binary
,这个包会包含一些常用的C库文件,如libsslpip install psycopg2-binary
利用以下指令新建一个App(负责一个特定功能)
python manage.py startapp users
这里我们新建一个users类,专门负责用户验证相关功能,如注册,登录
Project和App的区别
App是一个Web应用,它应该支持某个功能(可以干某些事情),如博客,数据库等。
Project是针对一个完整网站的一系列配置文件和App的集合。
一个Project可以包含很多个App,而一个App也可以被应用在很多个Project里面。模块化思想!!!
此时我们的项目目录应该变为
.
├── db.sqlite3
├── manage.py
├── miniTaoBao
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-37.pyc
│ │ ├── settings.cpython-37.pyc
│ │ ├── urls.cpython-37.pyc
│ │ └── wsgi.cpython-37.pyc
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── users
├── __init__.py
├── admin.py
├── apps.py
├── migrations
│ └── __init__.py
├── models.py
├── tests.py
└── views.py
可以看到,在miniTaobao的同级目录下多了一个users的文件夹,这里简单解释一下app里每个文件的作用:
注意,此时你只是新建了一个App,但是django还不能识别这个新的App,你还需要“注册”一下。
打开miniTaobao/setting.py
找到INSTALLED_APPS
,在最开始添加一行'users.apps.UsersConfig',
,这样django就会识别新建的App了。
进入users目录,分别修改view.py
和urls.py
两个文件,内容如下
view.py
from django.http import HttpResponse
def home(request):
return HttpResponse("Hello, world. You're at the user page.")
urls.py
(默认没有,自己新建一个)
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name="home"),
]
NOTE:每一个App里面都有自己的view和url,一般来说两者是一一对应的,新增一个view,一般就对应一条新的URL
还记得前面说的吗?miniTaobao/urls.py
记录了整个网站所有的url(当然也包含了这个新App!),所以现在我们需要去那里“登记”一下我们的url,打开miniTaobao/urls.py
文件,修改成以下的样子(增加了include
)
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('', include('users.urls')),
path('admin/', admin.site.urls),
]
include() 函数使得我们可以“引用”其他的url配置。当Django遇到include()
函数时,它会截断已经匹配到的url并将剩余部分发送到包含进来的url配置里面进行进一步的解析。include()
函数让URL更加“插件化”,每一个app都可以有自己的URL匹配规则(如users/urls.py
),然后每一个app可以被放置到不同的地方。
现在再次运行我们的程序,并打开浏览器输入0.0.0.0:8000
,你就能看到你刚新建的页面了
Django里面内置了一层ORM(Object-relational mapper)(用于把类映射到sql里面),所以我们不需要去写sql语句,只需要创建修改我们需要的类,剩下的事情,就都交给Django。
修改“model”三步走
models.py
里面修改modelpython manage.py makemigrations
,针对新的更改,生成migrationspython manage.py migrate
,应用上一步生成的migrations牢记每次修改模型后,都需要运行makemigrations
和migrate
两个步骤,这两个就是告诉Django把我们类的更新,映射到SQL数据库里面(生成修改和执行修改)。
打开users/models.py
,加入以下内容
from django.contrib.auth.models import User
from django.db import models
# Create your models here.
class Profile(models.Model):
user = models.OneToOneField(User, primary_key=True, on_delete=models.CASCADE)
is_seller = models.BooleanField(default=False)
def __str__(self):
return f'{self.user.username} Profile'
这里我们声明了一个profile类,你可能会好奇这个profile类里面并没有姓名密码等常见字段,这是因为django自带就有一个user类(用于验证),user类里面已经帮我们把这些常用字段封装好了,所以我们声明一个OneToOneField
,表明每个profile对象对应着一个user对象。
python manage.py makemigrations
Migrations for 'users':
users/migrations/0001_initial.py
- Create model Profile
python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions, users
Running migrations:
Applying users.0001_initial... OK
注意:如果此时python manage.py makemigrations
显示No changes detected,很大可能是你忘了去setting.py里面“注册”这个app。
至此,我们就成功创建了一个新的App,并编写了第一个视图函数,创建了第一个类。
好了,django的基本介绍就到这里了,下一篇文章将会介绍如何利用我们创建的Profile类和django自带的用户验证系统,实现基本的登录注册功能。
使用django内置的验证系统
本文代码