Django基础

前端之家收集整理的这篇文章主要介绍了Django基础前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

<table style="height: 30px; background-color: #afeeee; width: 1266px; ; width: 1266px;" border="0"><tr>
<td><span style="font-size: 16px;">一、简介</td>
</tr></table>

Python的WEB框架有Django、Tornado、Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM、模型绑定、模板引擎、缓存、Session等诸多功能

Django是一个开放源代码的Web应用框架,由Python写成。采用了MVC的软件设计模式,即模型M,视图V和控制器C。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件。并于2005年7月在BSD许可证下发布。这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的。

Django是一个基于MVC构造的框架。但是在Django中,控制器接受用户输入的部分由框架自行处理,所以 Django 里更关注的是模型(Model)、模板(Template)和视图(Views),称为 MTV模式。它们各自的职责如下:

模型(Model),即数据存取层

处理与数据相关的所有事务: 如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。

模板(Template),即表现层

处理与表现相关的决定: 如何在页面或其他类型文档中进行显示

视图(View),即业务逻辑层

存取模型及调取恰当模板的相关逻辑。模型与模板之间的桥梁。

基本目录结构:

mysite - mysite 站点配置目录 - - settings.py 配置文件 - urls.py - wsgi.py Nginx - manage.py
二、安装配置django以及基本命令使用1、安装django
-<span style="color: #008000;">#<span style="color: #008000;">linux或者mac
<span style="color: #000000;">pip3 install django
pip install django
=1.9.5

<span style="color: #008000;">#<span style="color: #008000;">检查django是否安装成功
<span style="color: #000000;">
运行python终端
>>> <span style="color: #0000ff;">import<span style="color: #000000;"> django
>>> django.VERSION

2、创建django工程以及app

pycharm中创建:file-->New Project-->Django-->create

使用命令创建

django-<span style="color: #008000;">#<span style="color: #008000;">创建app
python manage.py startapp appname

tips:django中的工程和app概念,django相当于一个大项目,而其中的小系统如监控、资产管理属于这个项目的一部分我们称之为app。

app目录结构

数据库修改表结构记录 admin.py 后台管理 apps.py 配置文件 models.py 数据库结构 tests.py views.py

 3、配置django

模板配置:django工程-->相应工程名-->settings.py-->TEMPLATES(默认配置好的)

TEMPLATES =: : [os.path.join(BASE_DIR,

静态目录(图片、css)配置:django工程-->相应工程名-->settings.py-->STATICFILES_DIRS(需要自己手动添加,目录使用逗号隔开)

STATICFILES_DIRS =

 tips:若访问某个连接出现forbbiden,很有可能是有CSRF原因,可以在配置中注释

settings.py

 4、其他django常用命令

django-admin.py startproject project- python manage.py startapp app--admin.py startapp app-数据库 python manage.py runserver 80010.0.0.0:8000 数据库 管理员 提示输入 修改管理员密码 修改的用户名 python manage.py dumpdata appname >数据库 python manage.py dbshell
三、开始你的站点 1、配置路由(工程目录中的urls.py)

django.conf.urls django.contrib cmdb urlpatterns =用户访问http://127.0.0.1:8000/admin/时候使用admin.site.urls处理 url(r用户访问http://127.0.0.1:8000,采用views下面的index函数处理,^表示开头,$表示结尾 ]

2、使用views处理用户请求(app下面的views.py)

django.shortcuts 用户所有的请求数据,通过该参数可以获取很多请求信息比如:
获取用户请求的方法
     # request.GET.get('key')    #获取请求发来的而数据,参数为数据key
     # request.POST.get('key')
 render(request,)用户请求,参数至少是两个,第一个固定为request,第二个为templates下的模板文件 this is wd 

") #使用HttpResponse响应用户请求,参数为字符串
用户请求重定向百度,若本地跳转只能写目录,比如'/login'

3、在templates目录中创建模板文件index.html,若模板文件中需要引入css或者images等内容,路径需要加上static,如

href=>

4、运行django程序,访问http://127.0.0.1:8000你的站点就会呈现

<table style="height: 30px; background-color: #afeeee; width: 1266px; ; width: 1266px;" border="0">

<tr>
<td><span style="font-size: 16px;">四、视图(views)介绍</td>
</tr></table>

django中的视图用于处理业务逻辑,常用的定义试图方法有两种:FBV(fuction base  view)、CBV(class base view)

1、FBV

views.py使用函数作为逻辑处理

HttpResponse(

2、CBV

views.py使用面向对象的方式定义

login(View): dispath(self,request,*args,**(= super(login,self).dispath(request,**kwargs)父类方法,使得重写子类方法不影响其他操作 ( result
 <span style="color: #0000ff;"&gt;def</span> get(self,request):<span style="color: #008000;"&gt;#</span><span style="color: #008000;"&gt;处理get<a href="/tag/fangfa/" target="_blank" class="keywords">方法</a>的请求</span>
      <span style="color: #0000ff;"&gt;print</span><span style="color: #000000;"&gt;(request.method)
      </span><span style="color: #0000ff;"&gt;return</span> render(request,<span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;index.html</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;)

 </span><span style="color: #0000ff;"&gt;def</span> post(self,request):<span style="color: #008000;"&gt;#</span><span style="color: #008000;"&gt;处理post<a href="/tag/fangfa/" target="_blank" class="keywords">方法</a>的请求</span>
      <span style="color: #0000ff;"&gt;print</span><span style="color: #000000;"&gt;(request.method)
      </span><span style="color: #0000ff;"&gt;return</span> render(request,<span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;index.html</span><span style="color: #800000;"&gt;"</span>)</pre>

使用cbv进行处理时候最,需要在urls.py中使用as_view()方法

url(r,views.login.as_view())

<table style="height: 30px; background-color: #afeeee; width: 1266px; ; width: 1266px;" border="0">

<tr>
<td><span style="font-size: 16px;">五、模板语言(template)</td>
</tr></table>

若我们想让前端和后台进行数据交互、传递,那我需要了解django中的模板引起,下面简单介绍常用的模板语言。

1、获取单个数据,后台视图传递数据:{{ key }}

视图函数

request.method==={:,:22,user_dict)页面传递数据

模板文件

    <Meta charset="UTF-8">    Title

{{ name }}

{{ age }}

2、使用for循环

 语法:

{{ item }}

循环字典、列表,生成多行数据:

三种循环方式

{{ i }} </span><span style="color: #008000;"&gt;<!--</span><span style="color: #008000;"&gt; 字典循环 </span><span style="color: #008000;"&gt;--></span><span style="color: #000000;"&gt; {% for k in k2.keys % } </span><span style="color: #0000ff;"&gt;<</span><span style="color: #800000;"&gt;h1</span><span style="color: #0000ff;"&gt;></span>{{ k }}<span style="color: #0000ff;"&gt;</</span><span style="color: #800000;"&gt;h1</span><span style="color: #0000ff;"&gt;></span><span style="color: #000000;"&gt; {% endfor % } {% for v in k2.values % } </span><span style="color: #0000ff;"&gt;<</span><span style="color: #800000;"&gt;h1</span><span style="color: #0000ff;"&gt;></span>{{ v }}<span style="color: #0000ff;"&gt;</</span><span style="color: #800000;"&gt;h1</span><span style="color: #0000ff;"&gt;></span><span style="color: #000000;"&gt; {% endfor % } {% for k,v in k2.items % } </span><span style="color: #0000ff;"&gt;<</span><span style="color: #800000;"&gt;h1</span><span style="color: #0000ff;"&gt;></span>{{ k }}-{{ v }}<span style="color: #0000ff;"&gt;</</span><span style="color: #800000;"&gt;h1</span><span style="color: #0000ff;"&gt;></span><span style="color: #000000;"&gt; {% endfor % } </span><span style="color: #0000ff;"&gt;</</span><span style="color: #800000;"&gt;body</span><span style="color: #0000ff;"&gt;></span>

<span style="color: #0000ff;"></<span style="color: #800000;">html<span style="color: #0000ff;">>

for循环参数介绍:

{{ forloop.counter }} 增加1,可以用于获取行数,从1开始 增加1,可以用于获取行数,从0开始 增加1,倒叙,1最后 增加1,倒叙,0最后 内容

for示例:

函数 request.method===: {: ,: : {: ,: : {: ,: render(request,,{<span style="color: #008000;">#<span style="color: #008000;">html模板
<!DOCTYPE html>
<html lang=<span style="color: #800000;">"
<span style="color: #800000;">en
<span style="color: #800000;">"
>

<Meta charset=> Title % row user_info.values %

{{ row.name }} {{ row.age }}

% endfor %

3、判断

{% if ordered_warranty %} {% else %} {% endif %}

 4、模版继承(extends)

当html模版中都使用了重复的HTML代码,我们可以使用模版来代替他们,然后让子模版继承它,但是需要注意的是,一个html

母模版:{% block name %% endblock %}使用:先声明:{% extends 'html模版' %}
{% block name %}自己定义的内容
{% endblock %}

示例:

master.html

Meta {% block title %}{% endblock %}

继承主模版:child1.html

zabbix nagios

5、模版导入(include)

 结合模版继承,一个相对完成的模版文件如下:

item.html

 child2.html

{% block title %}监控平台{% endblock %} # 替换标题

{% block css %} # 导入子版专用CSS文件
<span style="color: #0000ff;"><<span style="color: #800000;">link <span style="color: #ff0000;">rel<span style="color: #0000ff;">="stylesheet"<span style="color: #ff0000;"> href<span style="color: #0000ff;">="/static/commons.css"<span style="color: #0000ff;">><span style="color: #000000;">
{% endblock %}

{% block content %} # 替换内容
{% include "item.html" %} # 导入其他共用html模板文件
<span style="color: #0000ff;"><<span style="color: #800000;">ul<span style="color: #0000ff;">><span style="color: #000000;">
{% for row in item %} #循环
<span style="color: #0000ff;"><<span style="color: #800000;">li<span style="color: #0000ff;">>{{ row }}<span style="color: #0000ff;"></<span style="color: #800000;">li<span style="color: #0000ff;">><span style="color: #000000;">
{% endfor %}
<span style="color: #0000ff;"></<span style="color: #800000;">ul<span style="color: #0000ff;">><span style="color: #000000;">
{% endblock %}

{% block js %} # 导入子版专用JS文件
<span style="color: #0000ff;"><<span style="color: #800000;">script <span style="color: #ff0000;">src<span style="color: #0000ff;">="/static/child.js"<span style="color: #0000ff;">></<span style="color: #800000;">script<span style="color: #0000ff;">><span style="color: #000000;">
{% endblock %}

 6、自定义simple_tag

作用:在模版语言中可对后台传入的数据进行二次加工。

django提供的内置方法

{{ item.event_start|date:}} {{ bio|truncatewords: }}截取前30个字符串 {{ my_list|first|upper }} {{ name|lower }}

自定义simple_tag方法

步骤:

  • 在app目录下创建templatetags(名字固定)目录
  • 创建任意py文件,如myupper.py
  • 编写内容
  • 在工程settings.py中注册这个app
{% load myupper %}
{% 函数名 agr1 agr2 %文件中定义返回的逻辑返回,

 7、自定义filter

作用:同simple_tag一样,可以给数据做二次处理

 自定义filter步骤(参考simple_tag):

  • 在app目录下创建templatetags(名字固定)目录
  • 创建任意py文件,如myfilter.py
  • 编写内容(这里使用filter类)
{% load myfilter %}
  • 使用filter
{{参数1|myfilter:参数2}}

8、自定义filter和simple_tag优缺点比较

条件判断 ,列如: {% |myfilter: %% endif %}

<table style="height: 30px; background-color: #afeeee; width: 1266px; ; width: 1266px;" border="0">

<tr>
<td><span style="font-size: 16px;">六、路由系统(urls.py)</td>
</tr></table>

 在Django的urls中我们可以根据一个URL对应一个函数名或者类来定义路由规则:

url(r,

  • 单个正则表达式
url(r函数detail中增加一个参数来接受正则中匹配的内容函数定义如下 detail(request,nid):增加nid形参,接受url传递的参数 request.method=== render(request,,{:user_info})
  • 多个正则,按顺序接受
url(r函数定义
  • 命名正则路由(和顺序无关系,接受时候按照key,也就是命名的名字接受)
方式命名 url(r\d+)-(?P\d+).html/$函数中使用名字作为行参获取

 3、给路由添加额外参数

除了正则路由可以给视图函数传递参数以外,还可以使用路由中直接添加参数

url(r,views.detail,{: 12函数中增加nid参数来接受传递的参数

4、使用路由别名(name参数)

url(r,views.index,name=\d+)-(?P\d+).html/$,name=),添加参数如:{% url "my_index"  "1" "2" %}

作用:

  • 在模板中引用该名字代表其对应的url,如{% url "my_index" %},加参数使用{% url "my_detail"  "1" "2" %}
  • 在视图函数中使用别名,  reverse('"my_detail',args=(1,2))  ,  模块路径:django.urls.reverse
  • Model中使用获取URL  自定义get_absolute_url() 方法

5、url的路由分发

作用:当我们项目中的app有多个时候,将路由都配置在工程的urls.py可能相对繁琐,所以django为了带了目录转发的功能

1、配置工程中的urls.py

<span style="color: #008000;">#<span style="color: #008000;">导入include
<span style="color: #0000ff;">from django.conf.urls <span style="color: #0000ff;">import<span style="color: #000000;"> url,include

urlpatterns =<span style="color: #000000;"> [
url(r<span style="color: #800000;">'<span style="color: #800000;">^admin/<span style="color: #800000;">'<span style="color: #000000;">,url(r<span style="color: #800000;">'<span style="color: #800000;">^cmdb/<span style="color: #800000;">',include(<span style="color: #800000;">'<span style="color: #800000;">cmdb.urls<span style="color: #800000;">'))<span style="color: #008000;">#<span style="color: #008000;">匹配到以cmdb的都转发到cmdb目录下的urls.py中
]

2、在cmdb下新建urls.py,配置目的url

django.conf.urls django.contrib 函数 . =

6、命名空间

 使用namespacse参数给include命名,可以后续反向解析url。

1.工程下面的urls.py

django.contrib cmdb django.conf.urls =,include(,namespace=

2.app01下面的urls.py

django.conf.urls . =,name=

3.views.py中使用reverse反向解析

=reverse((v) 输出/app01/index/ HttpResponse(<span style="color: #008000;">#<span style="color: #008000;">在模版中解析改地址
{% url <span style="color: #800000;">'
<span style="color: #800000;">myapp01:myindex
<span style="color: #800000;">'
%<span style="color: #000000;">}

<span style="color: #008000;">#<span style="color: #008000;">带参数的url反解析
v = reverse(<span style="color: #800000;">'<span style="color: #800000;">myapp01:myindex<span style="color: #800000;">',kwargs={<span style="color: #800000;">'<span style="color: #800000;">page<span style="color: #800000;">':11<span style="color: #000000;">})
{% url <span style="color: #800000;">'<span style="color: #800000;">myapp01 :myindex<span style="color: #800000;">' page=12 %}

<table style="height: 30px; background-color: #afeeee; width: 1266px; ; width: 1266px;" border="0">

<tr>
<td><span style="font-size: 16px;">七、数据模型(modles)</td>
</tr></table>

 django中的数据模型采用的是ORM(Object Relational Mapping)框架,类似sqlachemy。

1.配置数据库注册app(默认使用sqlite3,无需配置):

使用MysqL配置:工程目录-->settings.py

MysqL','NAME':'dbname','USER': 'root','PASSWORD': 'xxx','HOST': '','PORT': '',} }

python3中无MysqL_db需要在工程目录下的__init__.py文件中配置使用pyMysqL

MysqL pyMysqL.install_as_MysqLdb() 

注册app:settings.py

INSTALLED_APPS =,增加的app名称 ]

定义表(类)

django.db <span style="color: #0000ff;">class user(models.Model): <span style="color: #008000;">#<span style="color: #008000;">数据库表名为app_classname,比如现在这个表存在数据库中为cmdb_user
name=models.CharField(max_length=24) <span style="color: #008000;">#<span style="color: #008000;">字符串,最大长度24
age=models.IntegerField() <span style="color: #008000;">#<span style="color: #008000;">整数类型

同步数据库

 2、django中的orm中增删改查

 增(add)

from cmdb import models
方法        
    models.user.objects.create(name=,age=22
    dict= {: ,: 22**添加
    obj = models.user(name=,age=22

删除(delete)

方法 models.user.objects.filter(name=).delete()

查询(query)

获取所有对象,返回queryset对象, all_object=sql中的where,加逗号相当于and models.user.objects.filter(id=2,name=) models.user.objects.filter(id__gt=2,name=) 2 and name等于wd models.user.objects.filter(id__lt=3) models.user.objects.filter(id__gte=1) = 1 models.user.objects.filter(id__lte=1) ,) models.user.objects.all().values_list(,) models.user.objects.get(id=3) 获取到的一个对象,如果不存在就报错 models.user.objects.filter(name=).first() 获取到的将是一个对象,获取不到则返回Nonemodels.user.objects.filter(name=获取最后一个,得到的是一个对象,获取不到则返回Nonemodels.user.objects.all()数据库中使用的sql语句,使用query属性
all_object=models.user.objects.filter(id__gt=2).querysql:SELECT "cmdb_user"."id","cmdb_user"."name","cmdb_user"."age" FROM "cmdb_user" WHERE "cmdb_user"."id" > 2

改(update)

models.user.objects.filter(id__gt=2).update(name=,age=22增加一样使用字典传参 dict = {: ,: 22=2).update(**dict)

 3、获取单表数据的三种方式

获取对象的方式,内部数据元素是对象 all_obj = models.user.objects.all()

<span style="color: #008000;">#<span style="color: #008000;">获取某些具体的行,内部数据元素是字典
all_value=models.user.objects.all().values(<span style="color: #800000;">'<span style="color: #800000;">id<span style="color: #800000;">',<span style="color: #800000;">'<span style="color: #800000;">name<span style="color: #800000;">')<span style="color: #008000;">#<span style="color: #008000;">返回queryset类型

<span style="color: #008000;">#<span style="color: #008000;">获取某些具体的行,内部数据元素是元祖,取值只能根据索引
all_value=models.user.objects.all().value_list(<span style="color: #800000;">'<span style="color: #800000;">id<span style="color: #800000;">',<span style="color: #800000;">'<span style="color: #800000;">name<span style="color: #800000;">')<span style="color: #008000;">#<span style="color: #008000;">返回queryset类型

 4、django中orm字段类型介绍

 BigAutoField(AutoField)
    </span><span style="color: #008000;"&gt;- bigint自增列,必须填入参数 primary_key=</span><span style="color: #000000;"&gt;<span style="color: #008000;"&gt;True</span>

    注:当model中如果没有自增列,则<a href="/tag/zidong/" target="_blank" class="keywords">自动</a>会创建一个列名为id的列
    </span><span style="color: #0000ff;"&gt;from</span> django.db <span style="color: #0000ff;"&gt;import</span><span style="color: #000000;"&gt; models

    </span><span style="color: #0000ff;"&gt;class</span><span style="color: #000000;"&gt; UserInfo(models.Model):
        </span><span style="color: #008000;"&gt;#</span><span style="color: #008000;"&gt; <a href="/tag/zidong/" target="_blank" class="keywords">自动</a>创建一个列名为id的且为自增的整数列</span>
        username = models.CharField(max_length=32<span style="color: #000000;"&gt;)

    </span><span style="color: #0000ff;"&gt;class</span><span style="color: #000000;"&gt; Group(models.Model):
        </span><span style="color: #008000;"&gt;#</span><span style="color: #008000;"&gt; <a href="/tag/zidingyi/" target="_blank" class="keywords">自定义</a>自增列</span>
        nid = models.AutoField(primary_key=<span style="color: #000000;"&gt;True)
        name </span>= models.CharField(max_length=32<span style="color: #000000;"&gt;)

SmallIntegerField(IntegerField):
    </span>- 小整数 -32768 ~ 32767<span style="color: #000000;"&gt;

PositiveSmallIntegerField(PositiveIntegerRelDbTypeMixin,IntegerField)
   </span> - 正小整数 0 ~ 32767<span style="color: #000000;"&gt;
IntegerField(Field)
    </span>- 整数列(有符号的) -2147483648 ~ 2147483647<span style="color: #000000;"&gt;

PositiveIntegerField(PositiveIntegerRelDbTypeMixin,IntegerField)
    </span>- 正整数 0 ~ 2147483647<span style="color: #000000;"&gt;

BigIntegerField(IntegerField):
    </span>- 长整型(有符号的) -9223372036854775808 ~ 9223372036854775807<span style="color: #000000;"&gt;

<a href="/tag/zidingyi/" target="_blank" class="keywords">自定义</a>无符号整数字段

    </span><span style="color: #0000ff;"&gt;class</span><span style="color: #000000;"&gt; UnsignedIntegerField(models.IntegerField):
        </span><span style="color: #0000ff;"&gt;def</span><span style="color: #000000;"&gt; db_type(self,connection):
            </span><span style="color: #0000ff;"&gt;return</span> <span style="color: #800000;"&gt;'</span><span style="color: #800000;"&gt;integer UNSIGNED</span><span style="color: #800000;"&gt;'</span><span style="color: #000000;"&gt;

BooleanField(Field)
    </span>-<span style="color: #000000;"&gt; 布尔值类型

NullBooleanField(Field):
    </span>-<span style="color: #000000;"&gt; 可以为空的布尔值

CharField(Field)
    </span>-<span style="color: #000000;"&gt; 字符类型
    </span>-<span style="color: #000000;"&gt; 必须提供max_length参数, max_length表示字符长度

TextField(Field)
    </span>-<span style="color: #000000;"&gt; 文本类型

EmailField(CharField):
    </span>-<span style="color: #000000;"&gt; 字符串类型,Django Admin以及ModelForm中提供验证机制

IPAddressField(Field)
    </span>-<span style="color: #000000;"&gt; 字符串类型,Django Admin以及ModelForm中提供验证 IPV4 机制

GenericIPAddressField(Field)
    </span>-<span style="color: #000000;"&gt; 字符串类型,Django Admin以及ModelForm中提供验证 Ipv4和Ipv6
    </span>-<span style="color: #000000;"&gt; 参数:
        protocol,用于指定Ipv4或Ipv6, </span><span style="color: #800000;"&gt;'</span><span style="color: #800000;"&gt;both</span><span style="color: #800000;"&gt;'</span>,<span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;ipv4</span><span style="color: #800000;"&gt;"</span>,<span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;ipv6</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;
        unpack_ipv4, 如果指定为True,则输入::ffff:</span>192.0.2.1时候,可解析为192.0.2.1,开启刺<a href="/tag/gongneng/" target="_blank" class="keywords">功能</a>,需要protocol=<span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;both</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;

URLField(CharField)
    </span>-<span style="color: #000000;"&gt; 字符串类型,Django Admin以及ModelForm中提供验证 URL

SlugField(CharField)
    </span>-<span style="color: #000000;"&gt; 字符串类型,Django Admin以及ModelForm中提供验证<a href="/tag/zhichi/" target="_blank" class="keywords">支持</a> 字母、数字、下划线、连接符(减号)

CommaSeparatedIntegerField(CharField)
    </span>-<span style="color: #000000;"&gt; 字符串类型,格式必须为逗号分割的数字

UUIDField(Field)
    </span>-<span style="color: #000000;"&gt; 字符串类型,Django Admin以及ModelForm中提供对UUID格式的验证

FilePathField(Field)
    </span>-<span style="color: #000000;"&gt; 字符串,Django Admin以及ModelForm中提供读取<a href="/tag/wenjian/" target="_blank" class="keywords">文件</a>夹下<a href="/tag/wenjian/" target="_blank" class="keywords">文件</a>的<a href="/tag/gongneng/" target="_blank" class="keywords">功能</a>
    </span>-<span style="color: #000000;"&gt; 参数:
            path,<a href="/tag/wenjian/" target="_blank" class="keywords">文件</a>夹路径
            match</span>=<span style="color: #000000;"&gt;None,正则匹配
            recursive</span>=<span style="color: #000000;"&gt;False,递归下面的<a href="/tag/wenjian/" target="_blank" class="keywords">文件</a>夹
            allow_files</span>=<span style="color: #000000;"&gt;True,允许<a href="/tag/wenjian/" target="_blank" class="keywords">文件</a>
            allow_folders</span>=<span style="color: #000000;"&gt;False,允许<a href="/tag/wenjian/" target="_blank" class="keywords">文件</a>夹

FileField(Field)
    </span>-<span style="color: #000000;"&gt; 字符串,路径保存在<a href="/tag/shujuku/" target="_blank" class="keywords">数据库</a>,<a href="/tag/wenjian/" target="_blank" class="keywords">文件</a><a href="/tag/shangchuan/" target="_blank" class="keywords">上传</a>到指定目录
    </span>-<span style="color: #000000;"&gt; 参数:
        upload_to </span>= <span style="color: #800000;"&gt;""</span><span style="color: #000000;"&gt;      <a href="/tag/shangchuan/" target="_blank" class="keywords">上传</a><a href="/tag/wenjian/" target="_blank" class="keywords">文件</a>的保存路径
        storage </span>=<span style="color: #000000;"&gt; None      存储组件,默认django.core.files.storage.FileSystemStorage

ImageField(FileField)
    </span>-<span style="color: #000000;"&gt; 字符串,路径保存在<a href="/tag/shujuku/" target="_blank" class="keywords">数据库</a>,<a href="/tag/wenjian/" target="_blank" class="keywords">文件</a><a href="/tag/shangchuan/" target="_blank" class="keywords">上传</a>到指定目录
    </span>-<span style="color: #000000;"&gt; 参数:
        upload_to </span>= <span style="color: #800000;"&gt;""</span><span style="color: #000000;"&gt;      <a href="/tag/shangchuan/" target="_blank" class="keywords">上传</a><a href="/tag/wenjian/" target="_blank" class="keywords">文件</a>的保存路径
        storage </span>=<span style="color: #000000;"&gt; None      存储组件,默认django.core.files.storage.FileSystemStorage
        width_field</span>=<span style="color: #000000;"&gt;None,<a href="/tag/shangchuan/" target="_blank" class="keywords">上传</a><a href="/tag/tupian/" target="_blank" class="keywords">图片</a>的高度保存的<a href="/tag/shujuku/" target="_blank" class="keywords">数据库</a>字段名(字符串)
        height_field</span>=<span style="color: #000000;"&gt;None   <a href="/tag/shangchuan/" target="_blank" class="keywords">上传</a><a href="/tag/tupian/" target="_blank" class="keywords">图片</a>的宽度保存的<a href="/tag/shujuku/" target="_blank" class="keywords">数据库</a>字段名(字符串)

DateTimeField(DateField)
    </span>- 日期+时间格式 YYYY-MM-<span style="color: #000000;"&gt;DD HH:MM[:ss[.uuuuuu]][TZ]

DateField(DateTimeCheckMixin,Field)
    </span>- 日期格式      YYYY-MM-<span style="color: #000000;"&gt;DD

TimeField(DateTimeCheckMixin,Field)
    </span>-<span style="color: #000000;"&gt; 时间格式      HH:MM[:ss[.uuuuuu]]

DurationField(Field)
    </span>-<span style="color: #000000;"&gt; 长整数,时间间隔,<a href="/tag/shujuku/" target="_blank" class="keywords">数据库</a>中按照bigint存储,ORM中<a href="/tag/huoqu/" target="_blank" class="keywords">获取</a>的值为datetime.timedelta类型

FloatField(Field)
    </span>-<span style="color: #000000;"&gt; 浮点型

DecimalField(Field)
    </span>-<span style="color: #000000;"&gt; 10进制小数
    </span>-<span style="color: #000000;"&gt; 参数:
        max_digits,小数总长度
        decimal_places,小数位长度

BinaryField(Field)
    </span>- 二进制类型</pre>
数据库中的属性,Django字段默认的值为:
            

5、字段参数介绍

数据库中字段是否可以为空 db_column 数据库中字段的列名 db_tablespace default 数据库中字段的默认值 primary_key 数据库中字段是否为主键 db_index 数据库中字段是否可以建立索引 unique 数据库中字段是否可以建立唯一索引 unique_for_date 数据库中字段【日期】部分是否可以建立唯一索引 unique_for_month 数据库中字段【月】部分是否可以建立唯一索引 unique_for_year 数据库中字段【年】部分是否可以建立唯一索引 auto_now 创建时,自动生成时间 auto_now_add 更新时,自动更新为当前时间 ps:需要使用obj.save()的方式才行 verbose_name Admin中显示的字段名称 blank Admin中是否允许用户输入为空 editable Admin中是否可以编辑 help_text Admin中该字段的提示信息 choices Admin中显示选择框的内容,用不变动的数据放在内存中从而避免跨表操作 如:gf #= models.IntegerField(choices=[(0,),(1,),default=1error_messages <a href="/tag/zidingyi/" target="_blank" class="keywords">自定义</a><a href="/tag/cuowu/" target="_blank" class="keywords">错误</a>信息(字典类型),从而定制想要<a href="/tag/xianshi/" target="_blank" class="keywords">显示</a>的<a href="/tag/cuowu/" target="_blank" class="keywords">错误</a>信息; 字典健:null,blank,invalid,invalid_choice,unique,</span><span style="color: #0000ff;"&gt;and</span><span style="color: #000000;"&gt; unique_for_date 如:{</span><span style="color: #800000;"&gt;'</span><span style="color: #800000;"&gt;null</span><span style="color: #800000;"&gt;'</span>: <span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;不能为空.</span><span style="color: #800000;"&gt;"</span>,<span style="color: #800000;"&gt;'</span><span style="color: #800000;"&gt;invalid</span><span style="color: #800000;"&gt;'</span>: <span style="color: #800000;"&gt;'</span><span style="color: #800000;"&gt;格式<a href="/tag/cuowu/" target="_blank" class="keywords">错误</a></span><span style="color: #800000;"&gt;'</span><span style="color: #000000;"&gt;} validators <a href="/tag/zidingyi/" target="_blank" class="keywords">自定义</a><a href="/tag/cuowu/" target="_blank" class="keywords">错误</a>验证(列表类型),从而定制想要的验证规则 </span><span style="color: #0000ff;"&gt;from</span> django.core.validators <span style="color: #0000ff;"&gt;import</span><span style="color: #000000;"&gt; RegexValidator </span><span style="color: #0000ff;"&gt;from</span> django.core.validators <span style="color: #0000ff;"&gt;import</span><span style="color: #000000;"&gt; EmailValidator,URLValidator,DecimalValidator,\ MaxLengthValidator,MinLengthValidator,MaxValueValidator,MinValueValidator 如: test </span>=<span style="color: #000000;"&gt; models.CharField( max_length</span>=32<span style="color: #000000;"&gt;,error_messages</span>=<span style="color: #000000;"&gt;{ </span><span style="color: #800000;"&gt;'</span><span style="color: #800000;"&gt;c1</span><span style="color: #800000;"&gt;'</span>: <span style="color: #800000;"&gt;'</span><span style="color: #800000;"&gt;优先错信息1</span><span style="color: #800000;"&gt;'</span><span style="color: #000000;"&gt;,</span><span style="color: #800000;"&gt;'</span><span style="color: #800000;"&gt;c2</span><span style="color: #800000;"&gt;'</span>: <span style="color: #800000;"&gt;'</span><span style="color: #800000;"&gt;优先错信息2</span><span style="color: #800000;"&gt;'</span><span style="color: #000000;"&gt;,</span><span style="color: #800000;"&gt;'</span><span style="color: #800000;"&gt;c3</span><span style="color: #800000;"&gt;'</span>: <span style="color: #800000;"&gt;'</span><span style="color: #800000;"&gt;优先错信息3</span><span style="color: #800000;"&gt;'</span><span style="color: #000000;"&gt;,validators</span>=<span style="color: #000000;"&gt;[ RegexValidator(regex</span>=<span style="color: #800000;"&gt;'</span><span style="color: #800000;"&gt;root_\d+</span><span style="color: #800000;"&gt;'</span>,message=<span style="color: #800000;"&gt;'</span><span style="color: #800000;"&gt;<a href="/tag/cuowu/" target="_blank" class="keywords">错误</a>了</span><span style="color: #800000;"&gt;'</span>,code=<span style="color: #800000;"&gt;'</span><span style="color: #800000;"&gt;c1</span><span style="color: #800000;"&gt;'</span><span style="color: #000000;"&gt;),RegexValidator(regex</span>=<span style="color: #800000;"&gt;'</span><span style="color: #800000;"&gt;root_112233\d+</span><span style="color: #800000;"&gt;'</span>,message=<span style="color: #800000;"&gt;'</span><span style="color: #800000;"&gt;又<a href="/tag/cuowu/" target="_blank" class="keywords">错误</a>了</span><span style="color: #800000;"&gt;'</span>,code=<span style="color: #800000;"&gt;'</span><span style="color: #800000;"&gt;c2</span><span style="color: #800000;"&gt;'</span><span style="color: #000000;"&gt;),EmailValidator(message</span>=<span style="color: #800000;"&gt;'</span><span style="color: #800000;"&gt;又<a href="/tag/cuowu/" target="_blank" class="keywords">错误</a>了</span><span style="color: #800000;"&gt;'</span>,code=<span style="color: #800000;"&gt;'</span><span style="color: #800000;"&gt;c3</span><span style="color: #800000;"&gt;'</span><span style="color: #000000;"&gt;),] )</span></pre>

 6、外键操作

 1、一对多

定义一对多表结构:

django.db <span style="color: #0000ff;">class<span style="color: #000000;"> user(models.Model):
name
=models.CharField(max_length=24<span style="color: #000000;">)
age=<span style="color: #000000;">models.IntegerField()
user_group=models.ForeignKey(<span style="color: #800000;">'<span style="color: #800000;">usergroup<span style="color: #800000;">',to_field=<span style="color: #800000;">'<span style="color: #800000;">gid<span style="color: #800000;">')<span style="color: #008000;">#<span style="color: #008000;">外键约束,to_field表示关联的字段,生成的字段为user_group_id,不写的话默认和表的主键关联

<span style="color: #0000ff;">class<span style="color: #000000;"> usergroup(models.Model):
gid=models.AutoField(primary_key=<span style="color: #000000;">True)
groupname=models.CharField(max_length=20,unique=<span style="color: #000000;">True)
ctime=models.DateField(auto_now_add=True)

一对多的增删改查

增加,先添加外键关联的表,这里先添加组,在添加用户 group_obj=models.usergroup.objects.create(groupname==,age=22,user_group_id=修改,直接将关联字段设置为null,前提创建表时候制定了外键可以为null=models.user.objects.filter(name=).update(user_group_id=删除 user_obj=models.user.objects.filter(name=查询,通过"."和双下划线进行查询 v1=models.user.objects.filter(name=(v1.name,v1.age,v1.user_group,sep=) (v1.user_group.groupname,v1.user_group.ctime)查询 v2=models.user.objects.filter(name=).values(,,)查询 row (row[],row[],row[],sep=</span></pre>

 2、多对多

定义多对多的两种方式:

=models.AutoField(primary_key==models.CharField(max_length=20=<span style="color: #0000ff;">class<span style="color: #000000;"> HostGroup(models.Model):
gid
=models.AutoField(primary_key=<span style="color: #000000;">True)
groupname
=models.CharField(max_length=22<span style="color: #000000;">)
<span style="color: #008000;">#
<span style="color: #008000;">自己定义第三张表,可以随意添加字段

<span style="color: #0000ff;">class<span style="color: #000000;"> HostToGroup(models.Model):
hobj=models.ForeignKey(to=<span style="color: #800000;">'<span style="color: #800000;">Host<span style="color: #800000;">',to_field=<span style="color: #800000;">"<span style="color: #800000;">hid<span style="color: #800000;">")<span style="color: #008000;">#<span style="color: #008000;">生成数据库表字段为hobj_id
gobj=models.ForeignKey(to=<span style="color: #800000;">'<span style="color: #800000;">HostGroup<span style="color: #800000;">',to_field=<span style="color: #800000;">"<span style="color: #800000;">gid<span style="color: #800000;">")<span style="color: #008000;">#<span style="color: #008000;">生成数据库表字段为gobj_id

<span style="color: #008000;">#<span style="color: #008000;">#########第二种使用django自带的方式创建########
<span style="color: #0000ff;">class<span style="color: #000000;"> Host(models.Model):
hid=models.AutoField(primary_key=<span style="color: #000000;">True)
hostname=models.CharField(max_length=20<span style="color: #000000;">)
ip=<span style="color: #000000;">models.GenericIPAddressField()

<span style="color: #0000ff;">class<span style="color: #000000;"> HostGroup(models.Model):
gid=models.AutoField(primary_key=<span style="color: #000000;">True)
groupname=models.CharField(max_length=22<span style="color: #000000;">)
hobj=models.ManyToManyField(<span style="color: #800000;">'<span style="color: #800000;">Host<span style="color: #800000;">'<span style="color: #000000;">)
<span style="color: #008000;">#<span style="color: #008000;">使用django自带字段创建第三张表,自动关联主键,数据库表名为cmdb_hostgroup_hobj,这种方式不能直接操作第三张表,可以间接操作

django中的orm多对多的增删改查

增加(add方法 obj=HostGroup.objects.get(id=1)获取到主机组对象 obj.hobj.add(2)添加Host表中id=2的主机 obj.hobj.add(2,3,4)添加 obj.hobj.add(*[1,2,3,4])

<span style="color: #008000;">#<span style="color: #008000;">删除
obj=HostGroup.objects.get(id=1)<span style="color: #008000;">#<span style="color: #008000;">获取到主机组对象
obj.hobj.remove(2)<span style="color: #008000;">#<span style="color: #008000;">删除Host表中id=2的主机
obj.hobj.add(2,3,4)<span style="color: #008000;">#<span style="color: #008000;">多个删除
obj.hobj.remove(*[1,4])<span style="color: #008000;">#<span style="color: #008000;">列表形式

<span style="color: #008000;">#<span style="color: #008000;">清除
obj.hobj.clear() <span style="color: #008000;">#<span style="color: #008000;">清除HostGroup中等于gid等于1的对应的所有主机

<span style="color: #008000;">#<span style="color: #008000;">修改
obj=HostGroup.objects.get(id=1)<span style="color: #008000;">#<span style="color: #008000;">获取到主机组对象
obj.hobj.set(2)<span style="color: #008000;">#<span style="color: #008000;">更新
obj.hobj.set([1,4])<span style="color: #008000;">#<span style="color: #008000;">注意不带*,数据库只保存1,2,3,4

<span style="color: #008000;">#<span style="color: #008000;">查<span style="color: #000000;">
obj.hobj.all()<span style="color: #008000;">#<span style="color: #008000;">获取关联组的所有主机,返回QuerySET对象

<table style="height: 30px; background-color: #afeeee; width: 1266px; ; width: 1266px;" border="0">

<tr>
<td><span style="font-size: 16px;">八、jQuery中的ajax</td>
</tr></table>

 简介:

AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。

AJAX 不是新的编程语言,而是一种使用现有标准的新方法

AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容

方法:

参数:

    "xml": 返回 XML 文档,可用 jQuery 处理。

    "html": 返回纯文本 HTML 信息;包含的script标签会在插入dom时执行。

    "script": 返回纯文本 JavaScript 代码。不会自动缓存结果。除非设置了"cache"参数。'''注意:'''在远程请求时(不在同一个域下),所有POST请求都将转为GET请求。(因为将使用DOM的script标签来加载)

    "json": 返回 JSON 数据 。

    "text": 返回纯文本字符串

  • headers:一个额外的"{键:值}"对映射到请求一起发送。此设置被设置之前beforeSend函数调用;因此,消息头中的值设置可以在覆盖beforeSend函数范围内的任何设置。
  • type: (默认: "GET") 请求方式 ("POST" 或 "GET"), 默认为 "GET"。注意:其它 HTTP 请求方法,如 PUT 和 DELETE 也可以使用,但仅部分浏览器支持
  • url:(默认: 当前页地址) 发送请求的地址。
  • traditional:如果你想要用传统的方式来序列化数据,那么就设置为true.
  • timeout:设置请求超时时间(毫秒)。此设置将覆盖全局设置。

回调函数

如果要处理$.ajax()得到的数据,则需要使用回调函数。beforeSend、error、dataFilter、success、complete。

  • beforeSend 在发送请求之前调用,并且传入一个XMLHttpRequest作为参数。
  • error 在请求出错时调用。传入XMLHttpRequest对象,描述错误类型的字符串以及一个异常对象(如果有的话)
  • dataFilter 在请求成功之后调用。传入返回的数据以及"dataType"参数的值。并且必须返回新的数据(可能是处理过的)传递给success回调函数
  • success 当请求之后数据返回触发调用。传入返回后的数据,以及包含成功代码的字符串。
  • complete 当请求完成之后调用这个函数,无论成功或失败。传入XMLHttpRequest对象,以及一个包含成功或错误代码的字符串。

 

 简单的ajax提交数据示例:

'/person'"POST",方法 data: {'name': wd,'age': "22"}, dataType: "JSON",自动将返回的数据用JSON解析 traditional: , success: (data){ obj=JSON.parse(data) 页面       location.href = "某个地址"; 跳转到某个页面错误执行 })

<span style="color: #008000;">//<span style="color: #008000;">后台返回json格式数据
<span style="color: #0000ff;">return HttpResponse(json.dumps(data))

<table style="height: 30px; background-color: #afeeee; width: 1266px; ; width: 1266px;" border="0">

<tr>
<td><span style="font-size: 16px;">获取用户数据以及上传文件</td>
</tr></table>

1、获取单一数据(get),以单选为例

模板文件

Meta Title dio"dio"

后台获取

2、获取多个数据(getlist)

模板文件

Meta Title Box"Box"Box"

后台接收:

data=request.POST.getlist((data)

3、用户上次文件

上传模板文件:

Meta Title

对应后台接受文件

request.method===request.FILES.get(= open(file_obj.name, line f = open(file_obj.name, line file_obj: 自动去file_obj.chunks()里面获取文件内容

 4、获取请求中的其他信息(用户发送的所有信息都封装在了request中)

request.path_info获取请求的url request.environ获取其他请求信息 request.environ[]request.FILES.get('key')获取文件对象#增加一个响应头内容
response = HttpResponse("字符串")response['name']= 'wd' return response

猜你在找的Django相关文章