原文链接
1. 准备工作
开发环境:python: 3.7.3 下载地址:https://www.python.org/downlo… pip: pip3 Django: 2.2 下载地址:https://www.djangoproject.com… PyCharm: 2017.2 下载地址:https://www.jetbrains.com/pyc…
2. 基础知识
1.Python: Python 发源于八十年代后期。开发者是 Centrum Wiskunde & Informatica 的 Guido van Rossum,这是位于荷兰阿姆斯特丹科学园区的一个数学和计算机科学研究中心。之后 Van Rossum 一直是 Python 开发很有影响的人物。事实上,社区成员给了他一个荣誉称号:终生仁慈独裁者 (BDFL)。
2.web 框架介绍 web 框架的概念就像建房子,地基、支撑柱、大梁的骨架还有其他沙石、地板等等材料已经有了,剩下的就是靠你自己组装起来。犹如积木一样。说明:图片来源百度。
Django: Python 代表性 web 框架,遵循 MMVC 架构模式的开源框架。它的名字来自 Django Reinhardt,一个法国作曲家和吉他演奏家,很多人认为他是历史上最伟大的吉他演奏家。位于堪萨斯洲的 Lawrence 城的 Lawrence Journal-World 报社有两位程序员,Adrian Holovaty 和 Simon Willison,他们在 2003 的时候开发出了 Django,用于给报纸开发 web 程序。
其他框架:tornado、flask、webpy
3. 实例
Python 的和 Pycharm 的安装忽略,安装比较简单。
1. 安装
Mac 终端下:
$ pip3 install django # 或 pip3 install django==2.2
Windows 是在 cmd 里面,命令相同。
2. 创建项目
打开 Pycharm, 欢迎页 create project, 然后 然后点击 create 就可以了。
PS:创建项目也可以使用命令这里不做介绍.
django-admin createproject DjangoQuick
django-admin startapp quick
3. 项目结构
4. 启动项目
Pycharm 菜单栏 直接点击运行。或者左下角 Terminal 输入 python3 manage.py runserver
将会在浏览器看到 这样表示项目已经启动成功,但是我们没有编写任何代码,所以出现了默认的错误提示。
5. 添加视图
打开 quick 目录下的 views.py,输入一下内容
from django.shortcuts import render
from django.http import HttpResponse # 新添加
# Create your views here.
# 新添加
def index(request):
return HttpResponse(‘success’)
6. 添加 url
打开 DjangoQuick 下的 urls.py,修改如下:
from django.contrib import admin
from django.urls import path
from quick.views import index # 导入包
urlpatterns = [
path(‘admin/’, admin.site.urls),
path(”, index) # 添加新的映射关系
]
如果使用 Pycharm 的按钮启动项目,需要点击 stop,重新运行,如果在 terminal 中运行项目,会自动重启。然后刷新浏览器。然后就会看到我们在 views.py 的 index 方法中的输出。
7. 返回 Html(模版)
在 quick 目录新建 templates 目录 然后右键 -new-html file, 新建一个 index.html 文件 index.html
<!DOCTYPE html>
<html lang=”en”>
<head>
<meta charset=”UTF-8″>
<title>Title</title>
</head>
<body>
这是一个 html from:https://litets.com
</body>
</html>
修改 views.py 文件
from django.shortcuts import render
def index(request):
return render(request, ‘index.html’)
重启服务器,刷新浏览器将会看到
这是一个 html from:https://litets.com
8. 静态文件
上面我们已经成功输出了一段 html 代码,并且成功展示。大家都知 html 的美化需要依靠 css,css 写法有两种:内联式和外联式。内联就不用多说,直接写在 html 同文件里面就可以了,现在我们使用外联文件改怎么办呢?
在 quick 目录下新建 static/css/style.css 文件。
.desc {
color: red;
}
然后修改 index.html
<!DOCTYPE html>
{% load static %}
<html lang=”en”>
<head>
<meta charset=”UTF-8″>
<title>Title</title>
<link rel=”stylesheet” href=”{% static ‘css/style.css’ %}”>
</head>
<body>
<div class=”desc”>
这是一个 html from:https://litets.com
</div>
</body>
</html>
刷新浏览器,将会看到字变成红色了。
9. 接收用户数据,处理后返回
修改 index.html 文件
<div class=”desc”>
这是一个 html from:https://litets.com
</div>
<!– 一下是新添加 –>
<form action=”/” method=”post”>
{% csrf_token %}
用户名: <input type=”text” name=”username” placeholder=” 请输入用户名 ”> <br>
密码:<input type=”password” name=”password” placeholder=” 请输入密码 ”> <br>
<input type=”submit” value=” 提交 ”>
</form>
<!–users 来自 view 中的 context–>
{% if users %}
<table border=”1px”>
<tr>
<td> 序号 </td>
<td> 用户名 </td>
<td> 密码 </td>
</tr>
{% for user in users %}
<tr>
<td>{{forloop.counter}}</td>
<td>{{user.username}}</td>
<td>{{user.password}}</td>
</tr>
{% endfor %}
</table>
{% endif %}
views.py 修改
from django.shortcuts import render
def index(request):
# 判断是否是 post 请求
if request.method == ‘POST’:
# 获取到请求参数,username 的写法,如果 username 不存在不会抛异常
# password 会抛异常
username = request.POST.get(‘username’)
password = request.POST[‘password’]
# 业务 需求:
users = []
for x in range(0,3):
users.append(
{‘username’: ‘%s-%d’ % (username, x), ‘password’: ‘%s-%d’ % (password, x)}
)
# 返回给用户 模版中使用到的 users 就是这里传递进去的
return render(request, template_name=’index.html’, context={
‘users’: users
})
return render(request, ‘index.html’)
这样我们就实现了一个基本的网站了,但是有一个问题,用户传递过来的数据只是单次有效,无法持久化。通常一个网站应用到需要持久化数据,比如文件、数据库等。
10. 数据库持久化数据
我们打开 DjangoQuick 目录下的 setting.py 找到 DATEBASES 默认项目使用 sqlite3 最为数据库。还支持 MySQL, PostgreSQL 等可用的引擎有:
‘django.db.backends.sqlite3’
‘django.db.backends.postgresql’
‘django.db.backends.mysql’
‘django.db.backends.oracle’
Mysql 的设置:
DATABASES = {
‘default’: {
‘ENGINE’: ‘django.db.backends.mysql’,
‘NAME’: ‘test’, # 数据库名称,
‘HOST’: ‘localhost’, # 主机地址
‘USER’: ‘user’, # 数据库用户
‘PASSWORD’: ‘pwd’, # 密码
‘PORT’: 3306 # mysql 的端口默认 3306
}
}
这里我们使用默认的 sqlite3。
打开 quick 下的 models.py
from django.db import models
class User(models.Model):
username = models.CharField(max_length=25)
password = models.CharField(max_length=18)
我们增加了两个字段 username 和 password,Django 默认支持 orm。同步数据库, 在终端中执行
$ python3 manage.py makemigrations
此命令执行完成后,会在 migrations 下生产记录 models 变动的记录。此时数据库并未变动,然后执行
$ python3 manage.py migrate
这样 models 的变动,立即同步到数据库中。
修改 views.py
from django.shortcuts import render
from .models import User
def index(request):
# 判断是否是 post 请求
if request.method == ‘POST’:
# 获取到请求参数,username 的写法,如果 username 不存在不会抛异常
# password 会抛异常
username = request.POST.get(‘username’)
password = request.POST[‘password’]
u = User(username=username, password=password)
u.save()
# 业务 需求:查询出所有数据
users = User.objects.all()
# 返回给用户
return render(request, template_name=’index.html’, context={
‘users’: users
})
这样添加用户后就会持久报错了,即使关闭浏览器,重新访问数据也是存在的。
我们查看 db.sqlite3 文件查看里面的数据
原文链接