简介
各环境的使用版本如下:
Linux Mint 18.2 (Ubuntu 16.04);
python版本2.7.12和3.5.2;
Django版本为1.9。
Python下有许多款不同的 Web 框架。Django是重量级选手中最有代表性的一位。Django是一个开放源代码的Web应用框架,由Python写成,遵守BSD版权,初次发布于2005年7月, 并于2008年9月发布了第一个正式版本1.0 。采用了MVC的软件设计模式,即模型M,视图V和控制器C。
Django对应Python版本如下:
Django版本 | Python 版本 |
---|---|
1.5 | 2.6.5,2.7,3.2,3.23 |
1.6 | 2.6,2.7,3.2,3.3 |
1.7 | 2.7,3.2,3.3,3.4 |
1.8 | 2.7, 3.2 , 3.3, 3.4, 3.5 |
1.9, 1.10 | 2.7, 3.4, 3.5 |
1.11 | 2.7, 3.4, 3.5, 3.6 |
2.0 | 3.5+ |
安装
- 安装Django
pip安装
# 这是基于python2版本的安装
sudo apt-get install python-pip
sudo pip install Django==1.9
# 这是基于python3版本的安装
sudo apt-get install python3-pip
sudo pip3 install Django==1.9
Linux自带源安装:
sudo apt-get install python-django==1.9 -y
自带源安装的 Django 一般版本比较旧,而用 pip 可以安装最新的版本。
安装完成后执行下述命令查看安装的版本:
python -c "import django; print(django.get_version())"
创建一个项目
创建项目
在命令行(终端)中,cd(例如我的是:cd /media/youjun/17658FC8797DEE2A/WorkSpace/DjangoWorkSpace)到你想要用来保存代码的目录,然后运行如下命令,如果你怕权限问题在前面加上sudo:
django-admin startproject demo
然后你看到生成的目录结构如下:
demo
demo # 对整个程序进行配置
__init__.py
settings.py # 配置文件
urls.py # URL对应关系
wsgi.py # 遵循WSGI规范,一般使用 uwsgi + nginx
manage.py # 管理Django程序:如下
运行项目
# 在python2版本运行
python manage.py # 或如下
python manage.py 8000 # 或如下
python manage.py runserver 127.0.0.1:8000
# 在python3版本运行
python3 manage.py # 或如下
python3 manage.py 8000 # 或如下
python3 manage.py runserver 127.0.0.1:8000
执行上述命令时会出现红:
You have unapplied migrations; your app may not work properly until they are applied.
Run 'python manage.py migrate' to apply them.
这是没有应用数据库设置,先不管。
打开 http://127.0.0.1:8000/ 链接就能看到Django的It worked!界面。
创建app
在项目生成的第一层demo目录下(与manage.py同级),执行如下命令创建一个名为login的app,(版本选择只是多或者少一个数字,后面就不都写出来了):
# 在python2版本运行
python manage.py startapp login
# 在python3版本运行
python3 manage.py startapp login
生成的app目录如下:
login
migrations # django orm框架,修改表结构的操作记录(差异化)
__init__.py # python3中有没有都一样,python2中必须有
admin.py # Django为我们提供的后台管理
apps.py # 配置当前app
models.py # ORM:写指定的类,通过命令可以创建数据库结构,M层
tests.py # 测试
views.py # V层
配置文件
要想项目能映射到建立的app,修改第二层demo目录的setting.py文件:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'login', # changed-----
]
视图函数编辑,编辑生成的login目录里的views.py文件:
from django.shortcuts import render
# Create your views here.
def login(request):
context = {}
return render(request, 'login.html', context)
接着,绑定 URL 与视图函数,修改第二层demo目录里的urls.py文件。网页action提交那里action=”/”,要和urls.py 里url(r’^’, views.login),保持一致!!!要是login/全是login/,要是login全是login(网页那里最前面多一个/来引用),否则点击提交会报错::
from django.conf.urls import url
from django.contrib import admin
from login import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^', views.login),
]
在第一层demo目录下创建一个templates模板文件夹,用来存放html文件,在templates文件中新建一个login.html文件,内容为:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/login" method="post">
<p>
<label for="username">用户名:</label>
<input id="username" type="text" />
</p>
<p>
<label for="password">密 码:</label>
<input id="password" type="text" />
</p>
<p>
<input type="submit" value="提交" />
</p>
</form>
</body>
</html>
修改第二层demo目录的setting.py文件,将模板文件路径写入:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')], # changed---------
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
运行测试
然后你可以打开终端去第一层demo目录下,运行项目了(如果上次的没结束,按ctr+c结束):
python manage.py runserver 127.0.0.1:8000
打开 http://127.0.0.1:8000/ 链接就能看到简单的注册界面(login.html)。但是在点击提交按钮的时候出现错误,原因是CSRF验证失败。请求中止,您看到消息是因为网站在提交表单时需要使用CSRF Cookie。出于安全原因,此cookie是必需的,以确保浏览器不被第三方劫持。
我们修改第二层demo目录的setting.py文件,再点击提交就会再跳到登录页面,没错,由于我们只写了一个页面就暂时跳到原来页面,后面再实现不同页面的请求跳转:
MIDDLEWARE_CLASSES = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]