Django知识框架
2018-10-22 13:34:54 0 举报
AI智能生成
Django知识框架梳理_Apollo
作者其他创作
大纲/内容
工作流程
安装环境:pip3 install django
创建project工程:
django-admin startproject [项目名]
例子:
django-admin startproject myweb
django-admin startproject [项目名]
例子:
django-admin startproject myweb
创建APP应用:
python manage.py startapp [应用名]
例子:
cd myweb
python manage.py startapp blog
python manage.py startapp [应用名]
例子:
cd myweb
python manage.py startapp blog
Setting配置文件:
'DIRS': [os.path.join(BASE_DIR, 'templates')]
'DIRS': [os.path.join(BASE_DIR, 'templates')]
根据需求设计代码
urls:负责把url模式映射到应用程序
views:设置对应关系
urls:负责把url模式映射到应用程序
views:设置对应关系
使用templates文件夹中的html模板
def login(request):
return render(request,"xx.html")
def login(request):
return render(request,"xx.html")
启动项目,端口默认8000,也可以自己设置
python manage.py runserver ip地址:端口
python manage.py runserver 127.0.0.1:8080
python manage.py runserver ip地址:端口
python manage.py runserver 127.0.0.1:8080
连接数据库,操作数据
models.py
models.py
命令
dir:查看文件目录
URL控制器
简单应用
urls.py文件:
# 正则匹配不带参数
# 匹配年份的文章
# re_path('^articles/\d{4}/$', views.year_articles1),
# # 匹配月份的文章
# re_path('^articles/\d{4}/\d{2}/$', views.month_articles1),
views.py文件
# 正则匹配不带参数的方法
# 匹配年份文章
def year_articles1(request):
return HttpResponse('1111111')
# 匹配月份文章
def month_articles1(request):
return HttpResponse('这是月份文章列表')
无名分组
urls.py文件
# # 正则匹配带参数,参数是由正则分组出来的,没有分组就没有参数
# # 匹配年份的文章
re_path('^articles/(\d{4})/$', views.year_articles2),
# # 匹配月份的文章
re_path('^articles/(\d{4})/(\d{2})/$', views.month_articles2),
views.py文件
# 正则匹配带参数,正则没有组名,这个时候相当于位置传参,顺序不能乱
# 正则匹配带参数的年份文章
def year_articles2(request, year):
return HttpResponse('这是' + year + '年的文章')
# 正则匹配带参数的月份文章
def month_articles2(request, i, j):
return HttpResponse('这是' + i + '年' + j + '月' + '的文章')
有名分组
urls.py文件
# 正则匹配带参数,参数是由正则分组出来的,没有分组就没有参数
# 正则分组是大写的P,不然报错........
# 匹配年份的文章
re_path(r'^articles/(?P<year>\d{4})/$', views.year_articles3),
# 匹配月份的文章
re_path(r'^articles/(?P<year>\d{4})/(?P<month>\d{2})/$', views.month_articles3),
views.py文件
# 正则匹配带参数,正则分组带组名,有名分组相当于关键字传参,名字好了,就不能修改
# 正则匹配带参数的年份文章
def year_articles3(request, year):
return HttpResponse('这是' + year + '年的文章')
# 正则匹配带参数的月份文章
def month_articles3(request, month, year):
return HttpResponse('这是' + year + '年' + month + '月' + '的文章')
request请求对象
response响应对象
HttpResponse('字符串')
render('页面')
读取变量
渲染页面
redirect()
模块
datetime模块
render模块
django返回一个网页时用
def login(request):
return render(request,"login.html")
HttpResponse模块
django返回一个字符串
def timer(request):
import datetime
now = datetime.datetime.now()
now_str = now.strftime('%Y-%m-%d')
return HttpResponse(now_str)
os模块
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
web框架
框架, 即framework, 特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,
使用框架可以帮你快速开发特定的系统. 简单地说, 就是你用别人搭建好的舞台来做表演
使用框架可以帮你快速开发特定的系统. 简单地说, 就是你用别人搭建好的舞台来做表演
Django的模板层
模板语法-变量
句点符(深度查询)
语法{{ var }}
示例
注意:句点符引用方法的时,不加括号.
过滤器(优化展示)
语法:{{obj|filter__name:param}
default
作用:如果一个变量是false或者为空,使用给定的默认值. 否则,使用变量的值.
语法:{{ value|default:"nothing" }}
length
作用:返回值的长度. 它对字符串和列表都起作用.
语法:{{ value|length }}
filesizeformat
作用:将值格式化为一个 “人类可读的” 文件尺寸(例如 '13 KB', '4.1 MB', '102 bytes', 等等)
{{ value|filesizeformat }}
date
作用:格式化时间
{{ value|date:"Y-m-d" }}
slice
作用:切片
{{ value|slice:"2:-1" }}
safe
模板语法-标签
for标签
作用:遍历每一个元素
正向完成循环
{% for i in lst %}
<p>{{ i }}</p>
{% endfor %}
{% for i in lst %}
<p>{{ i }}</p>
{% endfor %}
反向完成循环
{% for i in lst reversed %}
<p>{{ i }}</p>
{% endfor %}
{% for i in lst reversed %}
<p>{{ i }}</p>
{% endfor %}
forloop.first
forloop.last
forloop.counter
forloop.counter0
forloop.revcounter
forloop.revcounter0
forloop.last
forloop.counter
forloop.counter0
forloop.revcounter
forloop.revcounter0
if标签
作用:{% if %}会对一个变量求值,如果它的值是“True”(存在、不为空、且不是boolean类型的false值),对应的内容块会输出.
num = 66
{% if num > 66 %}
<p> 猜大了 </p>
{% elif num < 66 %}
<p> 猜小了</p>
{% elif num = 66 %}
<p> 恭喜你 </p>
{% else %}
<p> 非常遗憾! </p>
{% endif %}
{% if num > 66 %}
<p> 猜大了 </p>
{% elif num < 66 %}
<p> 猜小了</p>
{% elif num = 66 %}
<p> 恭喜你 </p>
{% else %}
<p> 非常遗憾! </p>
{% endif %}
for...empty
作用:for标签带有一个可选的{% empty %}从句, 以便在给出的组是空的或者没有被找到时, 可以有所操作.
{% for i in lst reversed %}
<p>{{ i }}</p>
{% empty %}
<p>Sorry! It's empty here.</p>
{% endfor %}
<p>{{ i }}</p>
{% empty %}
<p>Sorry! It's empty here.</p>
{% endfor %}
with标签
作用:使用一个简单地名字缓存一个复杂的变量,当你需要使用一个“昂贵的”方法(比如访问数据库)很多次的时候是非常有用的.
{% with total=business.employees.count %}
{{ total }} employee{{ total|pluralize }}
{% endwith %}
{{ total }} employee{{ total|pluralize }}
{% endwith %}
csrf_token标签
作用:这个标签用于跨站请求伪造保护
模板语法-继承
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<head>
<title>{% block title %}{% endblock %}</title>
</head>
<body>
<h1>My helpful timestamp site</h1>
{% block content %}{% endblock %}
<hr>
<div class="footer">
{% block footer %}
<p>Thanks for visiting my site.</p>
{% endblock %}
</div>
</body>
</html>
{% extends "base.html" %}
{% block title %}The current time{% endblock %}
{% block footer %}
<p>版权所有:外汇交易者联盟</p>
{% endblock %} Django的模型层
ORM简介
字段参数
CharField
作用:字符串字段, 用于较短的字符串.
参数:CharField要求必须有一个参数 maxlength, 用于从数据库层和Django校验层限制该字段所允许的最大字符数.
IntegerField
作用:用于保存一个整数.
FloatField
作用:用于保存一个整数
参数:
max_digits:总位数(不包括小数点和符号)
decimal_places:小数位数
max_digits:总位数(不包括小数点和符号)
decimal_places:小数位数
示例:
-要保存最大值为 999 (小数点后保存2位),你要这样定义字段:
models.FloatField(..., max_digits=5, decimal_places=2)
-要保存最大值一百万(小数点后保存10位)的话,你要这样定义:
models.FloatField(..., max_digits=19, decimal_places=10)
admin 用一个文本框(<input type="text">)表示该字段保存的数据.
-要保存最大值为 999 (小数点后保存2位),你要这样定义字段:
models.FloatField(..., max_digits=5, decimal_places=2)
-要保存最大值一百万(小数点后保存10位)的话,你要这样定义:
models.FloatField(..., max_digits=19, decimal_places=10)
admin 用一个文本框(<input type="text">)表示该字段保存的数据.
AutoField
一个IntegerField, 添加记录时它会自动增长,你通常不需要直接使用这个字段;
自定义一个主键:my_id=models.AutoField(primary_key=True)
如果你不指定主键的话,系统会自动添加一个主键字段到你的 model.
自定义一个主键:my_id=models.AutoField(primary_key=True)
如果你不指定主键的话,系统会自动添加一个主键字段到你的 model.
BooleanField
A true/false field. admin用checkbox来表示此类字段.
TextField
一个容量很大的文本字段.
admin用一个<textarea>(文本区域)表示该字段数据(一个多行编辑框).
EmailField
一个带有检查Email合法性的 CharField,不接受maxlength参数.
DateField
一个日期字段
Argument:描述
(仅仅在admin中有意义...)
(仅仅在admin中有意义...)
DateTimeField
一个日期时间字段. 类似 DateField 支持同样的附加选项.
ImageField
类似 FileField, 不过要校验上传对象是否是一个合法图片
可选参数:height_field和width_field,如果提供这两个参数,则图片将按提供的高度和宽度规格保存.
FileField
一个文件上传字段.
URLField
用于保存 URL.,若 verify_exists 参数为 True (默认), 给定的 URL 会预先检查是否存在( 即URL是否被有效装入且没有返回404响应).
admin 用一个 <input type="text"> 文本框表示该字段保存的数据(一个单行编辑框)
admin 用一个 <input type="text"> 文本框表示该字段保存的数据(一个单行编辑框)
NullBooleanField
类似 BooleanField, 不过允许 NULL 作为其中一个选项. 推荐使用这个字段而不要用 BooleanField 加 null=True 选项
admin 用一个选择框 <select> (三个可选择的值: "Unknown", "Yes" 和 "No" ) 来表示这种字段数据.
admin 用一个选择框 <select> (三个可选择的值: "Unknown", "Yes" 和 "No" ) 来表示这种字段数据.
SlugField
"Slug" 是一个报纸术语. slug 是某个东西的小小标记(短签), 只包含字母,数字,下划线和连字符.#它们通常用于URLs
若你使用 Django 开发版本,你可以指定 maxlength. 若 maxlength 未指定, Django 会使用默认长度: 50. #在
以前的 Django 版本,没有任何办法改变50 这个长度.
这暗示了 db_index=True.
它接受一个额外的参数: prepopulate_from, which is a list of fields from which to auto-#populate
the slug, via JavaScript,in the object's admin form: models.SlugField
(prepopulate_from=("pre_name", "name"))prepopulate_from 不接受 DateTimeFields.
若你使用 Django 开发版本,你可以指定 maxlength. 若 maxlength 未指定, Django 会使用默认长度: 50. #在
以前的 Django 版本,没有任何办法改变50 这个长度.
这暗示了 db_index=True.
它接受一个额外的参数: prepopulate_from, which is a list of fields from which to auto-#populate
the slug, via JavaScript,in the object's admin form: models.SlugField
(prepopulate_from=("pre_name", "name"))prepopulate_from 不接受 DateTimeFields.
XMLField
一个校验值是否为合法XML的 TextField,必须提供参数: schema_path, 它是一个用来校验文本的 RelaxNG schema #的文件系统路径.
FilePathField
可选项目为某个特定目录下的文件名,支持三个特殊的参数,其中第一个是必须提供的.
path:必需参数,一个目录的绝对文件系统路径, FilePathField 据此得到可选项目.
match:可选参数,一个正则表达式,作为一个字符串,FilePathField 将使用它过滤文件名. 注意这个正则表达式只会应用到 base filename 而不是路径全名
recursive可选参数.要么 True 要么 False. 默认值是 False. 是否包括 path 下面的全部子目录.
这三个参数可以同时使用.
match 仅应用于 base filename, 而不是路径全名. 那么,这个例子:
FilePathField(path="/home/images", match="foo.*", recursive=True)
...会匹配 /home/images/foo.gif 而不匹配 /home/images/foo/bar.gif
path:必需参数,一个目录的绝对文件系统路径, FilePathField 据此得到可选项目.
match:可选参数,一个正则表达式,作为一个字符串,FilePathField 将使用它过滤文件名. 注意这个正则表达式只会应用到 base filename 而不是路径全名
recursive可选参数.要么 True 要么 False. 默认值是 False. 是否包括 path 下面的全部子目录.
这三个参数可以同时使用.
match 仅应用于 base filename, 而不是路径全名. 那么,这个例子:
FilePathField(path="/home/images", match="foo.*", recursive=True)
...会匹配 /home/images/foo.gif 而不匹配 /home/images/foo/bar.gif
IPAddressField
一个字符串形式的 IP 地址, (i.e. "24.124.1.30").
CommaSeparatedIntegerField
用于存放逗号分隔的整数值. 类似 CharField, 必须要有maxlength参数.
单表操作
创建模型
连数据库
setting.py: 配置DATABASES
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME':'bms', # 要连接的数据库,连接前需要创建好
'USER':'root', # 连接数据库的用户名
'PASSWORD':'', # 连接数据库的密码
'HOST':'127.0.0.1', # 连接主机,默认本级
'PORT':3306 # 端口 默认3306
}
}
setting.py: 配置INSTALLED_APPS,不用的先注释掉
INSTALLED_APPS = [
# 'django.contrib.admin',
# 'django.contrib.auth',
# 'django.contrib.contenttypes',
# 'django.contrib.sessions',
# 'django.contrib.messages',
# 'django.contrib.staticfiles',
'app01.apps.App01Config',
]
models.py: 创建表结构
from django.db import models
# Create your models here.
class Book(models.Model):
book_id = models.AutoField(primary_key=True)
book_category = models.CharField(max_length=32)
book_name = models.CharField(max_length=64)
book_author = models.CharField(max_length=32)
book_price = models.DecimalField(max_digits=8, decimal_places=2)
book_pubdate = models.DateField()
book_publish = models.CharField(max_length=32)
__init__.py: 项目下的这个文件作说明
import pymysql
pymysql.install_as_MySQLdb()
收藏
0 条评论
下一页