- 大包大揽 Django
- 力求精简 web.py 和 Tornabo
- 新生代微框架 Flask 和 Bottle
微框架
优势:
- 聚焦业务逻辑
- 学习成本低
- 灵活性和伸缩性较强
劣势:
- 很多逻辑需要手动编写
- 安装大量模块后体积较大
Flask
保持核心简单,易扩展。
不包括数据库抽象层,表单验证等。 可通过添加扩展的方式添加功能
安装
pip install flask
通过导入 flask 模块,来验证安装是否成功。
表单开发
表单标签
用于声明表单范围,位于表单标签中的元素将被提交
语法: `<form></form>
属性: method, Enctype, action
表单域
表单域包含文本框,密码框等多种类型
语法: <input.../>
属性: type,name,value
表单域种类
文本框: <...type:text>
密码框:<...type:password>
文本区域:<...type:textarea>
文件上传框:<...type:file>
单选框:<...type:radio>
复选框:<...type:checkbox>
复选框的值为数组形式。
表单按钮
提交按钮
复位按钮
一般按钮
表单提交方式
GET
POST 数据放置在 HTML Header 中提交。
GET 可以被浏览器缓存
数据暴露 URL
适合:单纯请求数据,不进行其他操作
表单数据较短,不超过 1024 字符
对安全性要求一般
POST URL 可以被缓存,数据不被缓存
请求不便分享,没有长度限制
适合:不仅仅用于请求,需要将数据插入数据库内
表单数据过长
传送的数据不是 ASCII 编码
Djongo
优势:
- 详细的文档
- 全套结局啊方案
- 强大的 URL 路由配置
- 完善的自主管理后台
劣势:
- 紧耦合
- 自带 ORM 不够强大
- Template 较弱
[图片上传失败...(image-54d6bb-1519953931235)]
MTV 模型工作模型:
<img src="https://lh3.googleusercontent.com/-GaKxySImq-0/WoJQLmpzNOI/AAAAAAAAAGg/YpuMPv-m1O4SsBXzWqEgJGv5LpM6UK9JwCHMYCw/I/15184896385708.png" width = "400" alt="MySQL"/>
创建虚拟环境 virtualenv
如果你生产或开发环境需同时支持 Python 2 和 Python 3 ,那就需要 virtualenv。我们是从零开始学习 Django,所以可以直接使用 venv。简单来说,venv 模块是 Python 3.3 版本之后,标准库自带的虚拟环境创建和管理工具,在 Python 3 版本是代替 virtualenv。
使用 venv 在当前系统中创建出一个环境,该环境可以跟当前系统互不影响,你可以随意折腾。出现问题,只要删除即可,不会影响到当前系统。另外,有了 virtualenv 虚拟环境之后,我们就可以把那个文件夹整体拷贝了,部署起来方便很多。
步骤:
一. 创建项目目录
创建项目主目录。并进入主目录,创建项目目录
mkdir DjangoWeb
cd DjangoWeb
mkdir DjangoWebFirst
二. 创建虚拟环境,激活虚拟环境
--no-site-packages
表示不安装系统中的第三库
创建虚拟环境。
virtualenv --no-site-packages env_python
三. 使用 pycharm 创建项目
[图片上传失败...(image-ce1d91-1519953931235)]
在 location 填入项目目录所在路径
在 Interpreter 填入新建的虚拟环境
在 Application 填入第一个网站的名字
创建好后,目录类似这样:
[图片上传失败...(image-53318b-1519953931236)]
创建数据库
python3 manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying sessions.0001_initial... OK
(env_python) fuyiweng@fuyiwengdeMacBook-Pro:~/Documents/study/NiuCodeLesson/DjangoWeb/DjangoWebFirst% python3 manage.py makemigrations
Migrations for 'django_demo':
django_demo/migrations/0001_initial.py
- Create model People
新建数据库:
在 models.py 中新建一个 People 类,
在终端执行:python3 manage.py makemigrations
创建建表策略
执行表合并:
NiuCodeLesson/DjangoWeb/DjangoWebFirst% python3 manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, django_demo, sessions
Running migrations:
Applying django_demo.0001_initial... OK
在 views 中创建页面:
在 views 文件中,新建 first_try 类:
from django.shortcuts import render
from django.http import HttpRequest, HttpResponse
from django_demo.models import People
from django.template import Context, Template
# Create your views here.
def first_try(request):
person = People(name='jack', job='officer')
html_string = '''
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.2.6/semantic.css" media="screen" title="no title">
<title>diango</title>
</head>
<body>
<h1 class="ui center aligned icon header">
<i class="hand spock icon"></i>
Hello, {{ person.name }}
</h1>
</body>
</html>
'''
# 将 html 字符转成模板
t = Template(html_string)
# 组上下文
c = Context({'person': person})
# 渲染模板
web_page = t.render(c)
return HttpResponse(web_page)
在 urls 中增加 first_try 的 url:
- 引入 first_try
from django_demo.views import first_try
- 增加路径 urlpatterns 下添加
path(r'first_try/', first_try),
完成。
源码地址:
『NiuCodeLesson/DjangoWeb/DjangoWebFirst/』:
https://github.com/wengfe/NiuCodeLesson/tree/master/DjangoWeb/DjangoWebFirst
博客地址:
『wengfe.win』:http://www.wengfe.win/2018/02/11/2018-02-11/#more
网友评论