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