Python Web框架(URL/VIEWS/ORM)
一、路由系统URL
1、普通URL对应
url(r'^login/',views.login)
2、正则匹配
url(r'^index-(\d+).html',views.index)
url(r'^index-(?P<nid>\d+)-(?P<uid>\d+).html',views.detail)
def detail(request,*args,**kwargs):
pass
3、name
url(r'^login/',views.login,name='login_01')
url(r'^login/(\d+)',views.login,name='login_01')
模板内容:
{% "login_01" %}
{% "login_01" 3 %}
4、include路由分发
需要导入inclue:
from django.conf.urls import include, url
url(r'^cmdb/',include("app01.urls"))
二、视图VIEWS
1、获取数据
request.POST.get() ##获取单个文本值
request.POST.getlist() ##获取多个问本值
request.FILES.get() ##获取上传文件内容 <input type='file' name='file_name'>
obj = request.FILES.get('file_name')
path = os.path.join('upload', obj.name)
f = open(path, mode="wb")
for i in obj.chunks():
f.write(i)
f.close()
2、FBV&CBV
FBV:function based views
CBV:class based views
三、ORM操作
关系对象映射:Object Relational Mapping,用于实现面向对象编程语言里不同类型系统之间的数据之间的转换。
所有数据库相关定义在models.py里,然后利用python manage.py makemigrations /python manage.py migrate进行数据库创建
1、创建类
a.根据类自动创建数据库表(models.py)
from django.db import models # Create your models here.
class UserInfo(models.Model):
##隐含创建id列,主键自增
username=models.CharField(max_length=32)
password=models.CharField(max_length=64)
b.根据类对数据库中的数据进行各种操作(views.py)
(1)增加数据:
from cmdb import models
def orm(request):
models.UserInfo.objects.create(
username='root',password='')
return HttpResponse('orm')
或者
obj=models.UserInfo(username='root',password='')
obj.save()
(2)查询数据:
已对象形式反回[obj(col1,col2,col3),obj(col1,col2,col3),obj(col1,col2,col3)]
result=models.UserInfo.objects.all()
for row in result:
print(row.id,row.username,row.password)
result=models.UserInfo.objects.filter(username='root') a.列表形式
v1=models.UserInfo.objects.all() html渲染方式:
{% for row in v1 %}
{{row.id}}-{{row.username}}-{{row.code}}
{% endfor %}
b.字典形式
v2=models.UserInfo.objects.all().values('id','username')
html渲染方式:
{% for row in v2 %}
{{row.id}}-{{row.username}}}
{% endfor %}
c.元组形式
v3=models.UserInfo.objects.all().value_list('id','username')
html渲染方式:
{% for row in v3 %}
{{row.0}}-{{row.1}}
{% endfor %}
return render(request,'index.html',{'v1':v1,'v2':v2,'v3':v3})
(3)删除数据
models.UserInfo.objects.filter(username='root').delete()
(4)更新数据
models.UserInfo.objects.filter(username='root').update(password='')
(5)一对多操作
通过外键约束
b=models.ForeignKey(to="UserInfo",to_field='id')
(6)多对多操作
c.常用字段类型
字符串 models.CharField 字符串字段,不必须设置max_length参数
models.EmailField
models.IPAddressField IPV4
models.GenericIPAddressField IPV4和IPv6
models.TextField
数字 models.FloadField
models.IntegerField
models.BigIntegerField
models.Decimal 十进制小数类型,必须指定整数位max_digits和小数位max_places
models.SmallInteger 时间 models.DateField 日期类型,对于auto_time=now,每次更新都会更新这个时间;auto_now_add则只是第一次创建添加,之后更新不在改变
models.DateTimeField
models.TimeField
二进制 models.BinaryField
布尔 models.BoolenField 布尔类型=tinyint(1),不能为空,Blank=True
models.NullBoolenField 允许为空的布尔类型 自增 models.AutoField 自增列=int(11) 默认自动创建id自增主键,如果显示设置自增列必须设置其为主键
其他类型 models.ImageField 图片
models.FilePathField 文件
models.ForeignKey("参考主键表",to_field='主键表列')
d.常用字段参数
null: DB是否可以为空
default: 默认值
primary_key: 主键,primary_key=True
db_column: 列名
db_index: 索引,db_index=True
unique: 唯一索引,unique=True
unique_for_date:
unique_for_month:
unique_for_year:
choices: django admin中显示下拉框,避免连表查询
auto_now: 更新时自动生成
auto_now_add: 创建时自动生成
blank: django admin表示是否为空
verbose_name: django admin显示字段中文
editable: django admin控制是否被编辑
error_message: django admin自定义报错信息
help_text: django admin帮助信息
validators: django admin自定义错误信息
2、数据库配置
settings.py里有数据源配置,默认是sqlite
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
其他支持的数据源配置:
'django.db.backends.postgresql_psycopg2'
'django.db.backends.mysql'
'django.db.backends.sqlite3'
'django.db.backends.oracle'
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'mydatabase',
'USER': 'mydatabaseuser',
'PASSWORD': 'mypassword',
'HOST': '127.0.0.1',
'PORT': '',
}
}
注意:
python2里用的MySQLdb模块,而python3里默认没有MySQLdb模块,使用pymysql连接Mysql数据库
在project同名的__init__.py里需要写入以下代码:
import pymysql
pymysql.install_as_MySQLdb()
3、应用模块导入
在settings.py中导入相应的应用模块名称
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'cmdb',
)
4、生成数据库表结构
a.生成临时文件,在migrations
python manage.py makemigrations
Migrations for 'cmdb':
0001_initial.py:
- Create model UserInfo
b.正式执行生成表结构
python manage.py migrate
Operations to perform:
Synchronize unmigrated apps: messages, staticfiles
Apply all migrations: cmdb, sessions, auth, admin, contenttypes
Synchronizing apps without migrations:
Creating tables...
Running deferred SQL...
Installing custom SQL...
Running migrations:
Rendering model states... DONE
Applying cmdb.0001_initial... OK
创建后的表名为:cmdb_userinfo
5、登陆示例
6、Ajax
$.ajax({
url:'/host'
type:"POST"
data:{'k1':123,'k2':"root"},
success:function(data){
})
}
Python Web框架(URL/VIEWS/ORM)的更多相关文章
- 浅谈python web框架中的orm设计
看了一下廖雪峰的那个web框架,其实就是封装了web.py,请求使用异步并将aiomysql做为MySQL数据库提供了异步IO的驱动,前端部分则整合了jinja.其中最难的应该是orm部分了. 下面是 ...
- python web框架——扩展Django&tornado
一 Django自定义分页 目的:自定义分页功能,并把它写成模块(注意其中涉及到的python基础知识) models.py文件 # Create your models here. class Us ...
- Python Web框架
本节对Python Web框架学习 一.MTVModel: 存放所有数据库相关文件Template:模板文件,存放html文件View: 业务处理,即函数文件 二.MVCmodel: 存放数据库相关文 ...
- 浅谈Python web框架
一.Python web框架 Web Framework,Ruby的世界Rails一统江湖,而Python则是一个百花齐放的世界,各种micro-framework.framework不可胜数,不完全 ...
- python web框架介绍对比
Django Python框架虽然说是百花齐放,但仍然有那么一家是最大的,它就是Django.要说Django是Python框架里最好的,有人同意也有人 坚决反对,但说Django的文档最完善.市场占 ...
- python三大web框架Django,Flask,Flask,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架
Python几种主流框架 从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python We ...
- 微型 Python Web 框架: Bottle
微型 Python Web 框架: Bottle 在 19/09/11 07:04 PM 由 COSTONY 发表 Bottle 是一个非常小巧但高效的微型 Python Web 框架,它被设计为仅仅 ...
- Python Web框架Tornado的异步处理代码演示样例
1. What is Tornado Tornado是一个轻量级但高性能的Python web框架,与还有一个流行的Python web框架Django相比.tornado不提供操作数据库的ORM接口 ...
- Django,Flask,Tornado三大框架对比,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架
Django 与 Tornado 各自的优缺点Django优点: 大和全(重量级框架)自带orm,template,view 需要的功能也可以去找第三方的app注重高效开发全自动化的管理后台(只需要使 ...
随机推荐
- 初窥 MongoDB
最近在研究Nodejs 自然就接触到了MongoDB 这玩意儿有意思 与关系型数据库相比少了很多条条框框 让我情不自禁的想要了解它的所有 MongoDB与Redis同类 属于NoSql的一种,特点 ...
- Android音视频通话过程中最小化成悬浮框的实现(类似Android8.0画中画效果)
关于音视频通话过程中最小化成悬浮框这个功能的实现,网络上类似的文章很多,但是好像还没看到解释的较为清晰的,这里因为项目需要实现了这样的一个功能,今天我把它记录下来,一方面为了以后用到便于自己查阅,一方 ...
- 初学者没有搞明白的GOROOT,GOPATH,GOBIN,project目录
我们接下来一个一个来看关于Go语言中的三个目录的详细解释先通过go env查看go的环境变量(我这里是mac的环境,所以可能和你的不同) localhost:~ zhaofan$ go env GOA ...
- unity3d资源打包总结
http://www.manew.com/blog-33734-12973.html unity 打包的时候会把下面几个文件资源打进apk或者ipa包里面 1. Asset下的所有脚本文件 2. As ...
- ShoneSharp语言(S#)的设计和使用介绍系列(4)— 入门概述
ShoneSharp语言(S#)的设计和使用介绍 系列(4)- 入门概述 作者:Shone 声明:原创文章欢迎转载,但请注明出处,https://www.cnblogs.com/ShoneSharp. ...
- yii2.0中Rbac 怎么添加超加管理员
最笨的是定义常量.具体怎么做?看下面: //定义在控制器声明上面define('BEST_PHPER',serialize(array('admin','admin1')));//设置admin管理员 ...
- CS Round#50 D min-races
Min Races Time limit: 1000 msMemory limit: 256 MB In a racing championship there are N racing driv ...
- memset的实验
关于memset的实验 实验一:memset对char数组赋初值 #include<iostream> using namespace std; int main() { char a ...
- 好好写代码吧,没事别瞎B去创业!
知乎上看到这个问题 正好最近想写篇关于此的文章,于是就回答了一波. 也贴到这里来,回答如下 : 本问题简直为我量身定制,做为一个正在创业中的苦逼少年,说说我是如何从鼓吹怂恿身边人创业转换成反对创业的. ...
- 八皇后問題 (C語言递归實現 回溯法)
八皇后问题是一个以国际象棋为背景的问题:怎样可以在 8×8 的国际象棋棋盘上放置八个皇后,使得不论什么一个皇后都无法直接吃掉其它的皇后?为了达到此目的.任两个皇后都不能处于同一条横行.纵行或斜线上.現 ...