Django 基础知识
Django Models
django 本身提供了非常强大易使用的ORM组件,并且支持多种数据库,如sqllite,mysql,progressSql,Oracle等,当然最常用的搭配还是mysql,要启用orm,
先要配置好连接数据 的信息
我们使用MySQL配置
1)首选在setting里面配置驱动
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'OldboyWebsite', #确保此数据库已存在
'HOST':'', #mysql主机名
'PORT':'', #端口
'USER':'root', #用户名
'PASSWORD':'' #密码
}
}
Django ORM语法,为了更好的理解,我们来做一个基本的 书籍/作者/出版商 数据库结构。 我们这样做是因为 这是一个众所周知的例子,很多SQL有关的书籍也常用这个举例。
我们来假定下面的这些概念、字段和关系:
一个作者有姓,有名及email地址。
出版商有名称,地址,所在城市、省,国家,网站。
书籍有书名和出版日期。 它有一个或多个作者(和作者是多对多的关联关系[many-to-many]), 只有一个出版商(和出版商是一对多的关联关系[one-to-many],也被称作外键[foreign key])
from django.db import models
class Publisher(models.Model):
name = models.CharField(max_length=)
address = models.CharField(max_length=)
city = models.CharField(max_length=)
state_province = models.CharField(max_length=)
country = models.CharField(max_length=)
website = models.URLField()
class Author(models.Model):
first_name = models.CharField(max_length=)
last_name = models.CharField(max_length=)
email = models.EmailField()
class Book(models.Model):
name = models.CharField(max_length=)
authors = models.ManyToManyField(Author)
publisher = models.ForeignKey(Publisher)
publication_date = models.DateField()
更多models field 字段:https://docs.djangoproject.com/en/1.9/ref/models/fields/
模型安装
完成这些代码之后,现在让我们来在数据库中创建这些表。 要完成该项工作,第一步是在 Django 项目中 激活这些模型。 将上面的模型所在的app (此例子app是books) 添加到配置文件的已安装应用列表中即可完成此步骤。
再次编辑 settings.py 文件, 找到 INSTALLED_APPS 设置。 INSTALLED_APPS 告诉 Django 项目哪些 app 处于激活状态。 缺省情况下如下所示:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app01',
]
app01是项目名称
使数据库按照模型的配置生成表结构
C:\Users\Administrator\PycharmProjects\Study>python manage.py makemigrations
C:\Users\Administrator\PycharmProjects\Study>python manage.py migrate
然后进行测试
Django Form表单
django中的Form有两种功能
输入html
验证用户输入
ModelFrom
在使用Model和Form时,都需要对字段进行定义并指定类型,通过ModelForm则可以省去From中字段的定义
class BookModelForm(forms.ModelForm):
class Meta:
model = models.Book
#fields = ('name','publish_date') #显示那些字段
exclude = () #排除那些字段
widgets = {
'name' : forms.TextInput(attrs={'class':"form-control"}),
}
form
def book_modelform(request):
form = forms.BookModelForm() #如果是get 就直接返回return 页面
if request.method == 'POST': #如果是post
print (request.POST)
form = forms.BookModelForm(request.POST)
if form.is_valid(): #验证
print ("form is ok")
print (form.cleaned_data)
form.save()
return render(request, 'app01/book_modelform.html', {'book_form': form})
视图 views
from app01 import views
from django.conf.urls import url,include
urlpatterns = [
url(r'book_modelform/$',views.book_modelform),
]
Url
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form method="post" action="">{% csrf_token %}
{% for ele in book_form %}
<div class="form-row"> {{ ele.name}} {{ ele }} {{ ele.errors }} </div>
{% endfor %}
<input type="submit" value="创建新书">
</form>
</body>
</html>
模板文件
Django Admin
django amdin是django提供的一个后台管理页面,改管理页面提供完善的html和css,使得你在通过Model创建完数据库表之后,就可以对数据进行增删改查,而使用django admin 则需要以下步骤:
- 创建后台管理员
- 配置url
- 注册和配置django admin后台管理页面
1 创建后台管理员
python manage.py createsuperuser
2 配置后台管理url
url(r'^admin/', include(admin.site.urls))
3 注册和配置django admin 后台管理页面
a 在admin中执行如下配置
from django.contrib import admin from app01 import models admin.site.register(models.Author) admin.site.register(models.Book,BookAdmin) admin.site.register(models.Publisher)
b 自定义页面展示
class BookAdmin(admin.ModelAdmin):
list_display = ('name','publisher','publish_date')
admin.site.register(models.Author)
admin.site.register(models.Book,BookAdmin)
admin.site.register(models.Publisher)
注:如果是多对多 是不能显示的
c 添加页面搜索功能
class BookAdmin(admin.ModelAdmin):
list_display = ('name','publisher','publish_date')
search_fields = ('name','publisher__name')
admin.site.register(models.Author)
admin.site.register(models.Book,BookAdmin)
admin.site.register(models.Publisher)
d 添加过滤功能
class BookAdmin(admin.ModelAdmin):
list_display = ('name','publisher','publish_date')
search_fields = ('name','publisher__name')
list_filter = ('publisher','publish_date')
admin.site.register(models.Author)
admin.site.register(models.Book,BookAdmin)
admin.site.register(models.Publisher)
e 其它功能
class BookAdmin(admin.ModelAdmin):
list_display = ('id','name','publisher','publish_date')
search_fields = ('name','publisher__name')
list_filter = ('publisher','publish_date')
list_editable = ('name','publisher','publish_date') #编辑功能
list_per_page = 5 #分页
filter_horizontal = ('authors',) #选项功能
raw_id_fields = ('publisher',)
admin.site.register(models.Author)
admin.site.register(models.Book,BookAdmin)
admin.site.register(models.Publisher)
f admin action用法
class Book(models.Model):
name = models.CharField(max_length=)
authors = models.ManyToManyField(Author)
publisher = models.ForeignKey(Publisher)
publish_date = models.DateField()
status_choices = (('published',u'已出版'),
('producing',u'待出版'),
('forbidden',u'禁书'),
)
status = models.CharField(choices=status_choices,max_length=,default='producing')
def __unicode__(self):
return "%s" %self.name
class Meta:
verbose_name_plural = u'书籍'
models
admin.py
def make_forbidden(modelAdmin,request,Queryset):
print ('-->',request,Queryset)
Queryset.update(status='forbidden')
make_forbidden.short_description = "Set to forbidden"
class BookAdmin(admin.ModelAdmin):
list_display = ('id','name','publisher','publish_date','status')
search_fields = ('name','publisher__name')
list_filter = ('publisher','publish_date')
list_editable = ('name','publisher')
list_per_page = 5
filter_horizontal = ('authors',)
# raw_id_fields = ('publisher',)
actions = [make_forbidden,]
admin.site.register(models.Author)
admin.site.register(models.Book,BookAdmin)
admin.site.register(models.Publisher)
g 状态显示颜色
class Book(models.Model):
name = models.CharField(max_length=)
authors = models.ManyToManyField(Author)
publisher = models.ForeignKey(Publisher)
publish_date = models.DateField()
status_choices = (('published',u'已出版'),
('producing',u'待出版'),
('forbidden',u'禁书'),
)
status = models.CharField(choices=status_choices,max_length=,default='producing')
def __unicode__(self):
return "%s" %self.name
class Meta:
verbose_name_plural = u'书籍'
def colored_status(self):
if self.status == "published":
format_td = format_html('<span style="padding:2px;background-color:yellowgreen;color:white">已出版</span>')
elif self.status == "producing":
format_td = format_html('<span style="padding:2px;background-color:gray;color:white">待出版</span>')
elif self.status == "forbidden":
format_td = format_html('<span style="padding:2px;background-color:orange;color:white">禁书</span>')
return format_td
colored_status.short_description = 'status'
admin.py
from django.contrib import admin
# Register your models here.
from app01 import models
def make_forbidden(modelAdmin,request,Queryset):
print ('-->',request,Queryset)
Queryset.update(status='forbidden')
make_forbidden.short_description = "Set to forbidden"
class BookAdmin(admin.ModelAdmin):
list_display = ('id','name','publisher','publish_date','colored_status')
search_fields = ('name','publisher__name')
list_filter = ('publisher','publish_date')
list_editable = ('name','publisher')
list_per_page =
filter_horizontal = ('authors',)
# raw_id_fields = ('publisher',)
actions = [make_forbidden,]
admin.site.register(models.Author)
admin.site.register(models.Book,BookAdmin)
admin.site.register(models.Publisher)
Django 基础知识的更多相关文章
- 01 Django基础知识
相关概念 软件框架 一个公司是由公司中的各部部门来组成的,每一个部门拥有特定的职能,部门与部门之间通过相互的配合来完成让公司运转起来. 一个软件框架是由其中各个软件模块组成的,每一个模块都有特定的功能 ...
- django基础知识
一.django的安装 1. pip3 install django 2. 把安装路径加到环境变量里以便以后启动admin相关命令,在windows系统中---我的电脑---属性----高级系统设置- ...
- django 基础知识回顾
内容回顾: 1. ajax参数 url: type: data: 1.value不能是字典 {k1:'v1',k2:[1,2,3,],k3; JSON.string} 2.$('').serilize ...
- django基础知识之Response对象
HttpResponse对象 在django.http模块中定义了HttpResponse对象的API HttpRequest对象由Django自动创建,HttpResponse对象由程序员创建 不调 ...
- Django基础知识MTV
Django简介 Django是使用Python编写的一个开源Web框架.可以用它来快速搭建一个高性能的网站. Django也是一个MVC框架.但是在Django中,控制器接受用户输入的部分由框架自行 ...
- Django02 Django基础知识
一.内容回顾 1.web应用程序 2.HTTP协议 a.http协议特性 b.http请求格式 c.http响应格式 3.wsgiref模块 4.Django下载与简单应用 a.Django简介(MT ...
- django基础知识之布署:
布署 从uwsgi.nginx.静态文件三个方面处理 服务器介绍 服务器:私有服务器.公有服务器 私有服务器:公司自己购买.自己维护,只布署自己的应用,可供公司内部或外网访问 公有服务器:集成好运营环 ...
- django基础知识之中间件:
中间件 是一个轻量级.底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出 激活:添加到Django配置文件中的MIDDLEWARE_CLASSES元组中 每个中间件 ...
- django基础知识之Ajax:
使用Ajax 使用视图通过上下文向模板中传递数据,需要先加载完成模板的静态页面,再执行模型代码,生成最张的html,返回给浏览器,这个过程将页面与数据集成到了一起,扩展性差 改进方案:通过ajax的方 ...
随机推荐
- Qt 外观之一 ——Qt Style Sheet
Qt Style Sheet 目录 使用 对于应用程序 创建自定义控件 QSS语法 一般选择器(selector) 伪选择器 解决冲突 使用specificity Namespace冲突 级联效应 设 ...
- jQuery 设置select默认选中问题
在进行其他操作后,恢复select默认选中 html代码: <select id="shai" style="width:150px;margin:5px 50px ...
- SQLServer 重建索引前后对比
在做维护项目的时,我们经常会遇到索引维护的问题,通过语句,我们就可以判断某个表的索引是否需要重建. 执行一下语句:先分析表的索引 分析表的索引建立情况:DBCC showcontig('Table') ...
- PhotonServer 学习
版本:Photon-OnPremise-Server-SDK_v3-4-31-10808 输出文件夹:deploy/名称/bin PhotonServer.config 配置 <Applicat ...
- C# lesson3
一.局部变量和成员变量 1.程序入口(Main)要调用非静态成员(变量或方法)的话,是需要通过对象去调用的: 2.普通方法里面去调用变量或方法的话可以直接调用 成员变量(全局变量):放在Main方法之 ...
- 【原创】Spring MVC项目搭建(使用Java配置)
一.使用Intellij idea,新建maven项目,选择maven-archetype-webapp. 二.在src/main下新建文件夹,命名为java,并标注为source folder. 三 ...
- Scala学习---映射和元祖
1.设置一个映射,其中包含你想要的一些装备,以及他们的价格.然后构建另一个映射,采用同一组键,但在价格上打9折. scala> val map = Map("a"->1 ...
- 深度分析如何在Hadoop中控制Map的数量
深度分析如何在Hadoop中控制Map的数量 guibin.beijing@gmail.com 很多文档中描述,Mapper的数量在默认情况下不可直接控制干预,因为Mapper的数量由输入的大小和个数 ...
- 【第三篇】Volley图片加载之NetworkImageView代码分析
在Volley的使用之加载图片讲过使用NetWorkImageView进行图片加载的例子,本文着重讲解NetWorkImageView内部是如何实现的,以及Volley这个控件有什么特性. 1,通 ...
- 1、IO输入&输出流 简介
IO流的分类: * 流向: * 输入流 读取数据 * 输出流 写出数据 * 数据类型: * 字节流 * 字节输入流 读取数据 InputStream * 字节输出流 写出数据 OutputStream ...