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 - 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 = url(r ]

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

django.shortcuts
 render(request,) this is wd 

") #使用HttpResponse响应用户请求,参数为字符串

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方法的请求</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方法的请求</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)

模板文件:

    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 }}

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;">"
>

> 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

{% 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: }} {{ my_list|first|upper }} {{ name|lower }}

自定义simple_tag方法:

步骤:

  • 在app目录下创建templatetags(名字固定)目录
  • 创建任意py文件,如myupper.py
  • 编写内容
  • 在工程settings.py中注册这个app
  • 在模版中装载自定义simple_tag的python文件,在模版文件的顶部
{% load myupper %}
  • 在模版中使用自定义的simple_tag函数
{% 函数名 agr1 agr2 %

 7、自定义filter

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

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

  • 在app目录下创建templatetags(名字固定)目录
  • 创建任意py文件,如myfilter.py
  • 编写内容(这里使用filter类)
  • 在工程settings.py中注册这个app
  • 在模板文件中装载该python文件
{% 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(request,nid): request.method=== render(request,,{:user_info})
  • 多个正则,按顺序接受
url(r
  • 命名正则路由(和顺序无关系,接受时候按照key,也就是命名的名字接受)
方式命名 url(r\d+)-(?P\d+).html/$

 3、给路由添加额外参数

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

url(r,views.detail,{: 12

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

url(r,views.index,name=\d+)-(?P\d+).html/$,name=),

作用:

  • 在模板中引用该名字代表其对应的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) 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

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

注册app:settings.py

INSTALLED_APPS =, ]

定义表(类)

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)

all_object= 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() models.user.objects.filter(name=models.user.objects.all()
all_object=models.user.objects.filter(id__gt=2).querySELECT "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中如果没有自增列,则自动会创建一个列名为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; 自动创建一个列名为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; 自定义自增列</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;

自定义无符号整数字段

    </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,开启刺功能,需要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中提供验证支持 字母、数字、下划线、连接符(减号)

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中提供读取文件夹下文件的功能
    </span>-<span style="color: #000000;"&gt; 参数:
            path,文件夹路径
            match</span>=<span style="color: #000000;"&gt;None,正则匹配
            recursive</span>=<span style="color: #000000;"&gt;False,递归下面的文件夹
            allow_files</span>=<span style="color: #000000;"&gt;True,允许文件
            allow_folders</span>=<span style="color: #000000;"&gt;False,允许文件夹

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

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

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; 长整数,时间间隔,数据库中按照bigint存储,ORM中获取的值为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>

5、字段参数介绍

verbose_name Admin中显示的字段名称 blank Admin中是否允许用户输入为空 editable Admin中是否可以编辑 help_text Admin中该字段的提示信息 choices Admin中显示选择框的内容,用不变动的数据放在内存中从而避免跨表操作 如:gf #= models.IntegerField(choices=[(0,),(1,),default=1error_messages 自定义错误信息(字典类型),从而定制想要显示的错误信息; 字典健: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;格式错误</span><span style="color: #800000;"&gt;'</span><span style="color: #000000;"&gt;} validators 自定义错误验证(列表类型),从而定制想要的验证规则 </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;错误了</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;又错误了</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;又错误了</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==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多对多的增删改查

obj=HostGroup.objects.get(id=1) obj.hobj.add(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": 返回纯文本字符串

回调函数:

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

 

 简单的ajax提交数据示例:

<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),以单选为例

模板文件:

Title

后台获取:

2、获取多个数据(getlist)

模板文件:

Title

后台接收:

data=request.POST.getlist((data)

3、用户上次文件

  • form 表单中需要添加:enctype="multipart/form-data"
  • 后台使用obj.thrunks接受文件内容

上传模板文件:

Title

对应后台接受文件

request.method===request.FILES.get(= open(file_obj.name, line f = open(file_obj.name, line file_obj:

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

request.path_info request.environ request.environ[]request.FILES.get('key')
response = HttpResponse("字符串")response['name']= 'wd' return response

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


注:所有源代码均实测运行过。所有源代码均已上传CSDN,请有需要的朋友自行下载。
继承APIView和ViewSetMixin;作用也与APIView基本类似,提供了身份认证、权限校验、流量管理等。ViewSet在开发接口中不经常用。
一、Django介绍Python下有许多款不同的 Web 框架。Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。Django 是一个开放源代码的 Web 应用框架,由 Python 写成。Django 遵守 BSD 版权,初次发布于 2005 年 7 月, 并于 2008 年 9 月发布了第一个正式版本 1.0 。Django学习线路Django 采用了 MVT 的软件设计模式,即模型(Model),视图(View)和模板(Template)。这个MVT模式并
本文从nginx快速掌握到使用,gunicorn快速掌握到使用,实现小白快速搭建django项目,并对可能出现的报错进行了分析
uniapp微信小程序订阅消息发送服务通知
Django终端打印SQL语句 1 Setting配置: 2 默认python 使用的MysqlDB连接,Python3 支持支持pymysql 所有需要在app里面的__init__加上下面配置:
url: re_path(&#39;authors/$&#39;, views.AuthorView.as_view()), re_path(&#39;book/(?P\d+)/$&#39;, vie
前提 关于html寻找路线: template 如果在各个APP中存在, Django 会优先找全局template 文件下的html文件,如果全局下的template文件没有相关的html Djan
// GET请求request.GET // POST请求request.POST // 处理文件上传请求request.FILES // 处理如checkbox等多选 接受列表request.get
from bs4 import BeautifulSoup#kindeditordef kindeditor(request): s = &#39;&#39;&#39; &lt;li&gt;&lt;s
view.py 配置 html 配置
from django.http import JsonResponse JsonResponse 里面代码会加这一个响应头 kwargs.setdefault(&#39;content_type&#
#下面两种是基于QuerySet查询 也就是说SQL中用的jion连表的方式查询books = models.UserInfo.objects.all() print(type(books)) &gt
return HttpResponse(&quot;OK&quot;) 返回一个字符串 return redirect(&quot;/index/&quot;) 返回URL return render
from django.http import JsonResponse JsonResponse 里面代码会加这一个响应头 kwargs.setdefault(&#39;content_type&#
浏览器有一个很重要的概念——同源策略(Same-Origin Policy)。所谓同源是指,域名,协议,端口相同。不同源的客户端脚本(javascript、ActionScript)在没明确授权的情况
自动发送 &gt; 依赖jQuery文件 实例--&gt;GET请求: 手动发送 &gt; 依赖浏览器XML对象(也叫原生ajax) Ajax主要就是使用 【XmlHttpRequest】对象来完成请
#下面两种是基于QuerySet查询 也就是说SQL中用的jion连表的方式查询books = models.UserInfo.objects.all() print(type(books)) &gt
// GET请求request.GET // POST请求request.POST // 处理文件上传请求request.FILES // 处理如checkbox等多选 接受列表request.get
return HttpResponse(&quot;OK&quot;) 返回一个字符串 return redirect(&quot;/index/&quot;) 返回URL return render