转载自https://blog.csdn.net/xm_csdn/article/details/74419683
创建项目
原文1:http://blog.csdn.net/yjx2323999451/article/details/53200243
原文2:http://www.cnblogs.com/benshan/p/4445074.html
原文3:http://www.runoob.com/django/django-first-app.html
--------------------------------------------------------------------------------------
连接mysql数据库
原文4:http://www.cnblogs.com/yangmv/p/5327477.html
原文5:http://www.cnblogs.com/taiguyiba/p/6058315.html
原文6:http://www.jb51.net/article/42870.htm
前提:
配置好python+django环境
1创建web服务器:
使用cmd命令进入到存放项目的目录中执行以下命令:
python django-admin.py startproject mysite
成功后会在目录中出现 mysite 目录,此处创建的为开发服务器
2创建app:
一个项目中包含一个或多个这样的app。app可以理解为一块功能集合。比如产品管理模块就包含增删该查等功能,可以把产品管理叫做一个app。每个Django app都有独立的models,views等,易移植和被复用
使用cmd命令进入到mysite目录下(创建的web服务器目录)执行以下命令
python manage.py startapp test_pr
test_pr才是web应用程序
3创建模板文件的目录
在项目根目录下新建一个templates目录
4目录文件说明
子目录mysite下表示工程的全局配置,分别为setttings.py、urls.py和wsgi.py,其中setttings.py包括了系统的数据库配置、应用配置和其他配置,urls.py则表示web工程Url映射的配置。
子目录test_pr则是在该工程下创建的app,包含了models.py、tests.py和views.py等文件
templates目录则为模板文件的目录
manage.py是Django提供的一个管理工具,可以同步数据库等等
-----------------------------------------------------------------------------------------------------------------------------------------------
Django 里更关注的是模型(Model)、模板(Template)和视图(Views),Django 也被称为 MTV 框架 。
在 MTV 开发模式中:
M 代表模型(Model),即数据存取层。该层处理与数据相关的所有事务:如何存取、如何确认有效性、包含哪些行为以及数据之间的关系等
T 代表模板(Template),即表现层。该层处理与表现相关的决定:如何在页面或其他类型文档中进行显示。
V代表View,业务逻辑层。这一层包含访问模型的逻辑和按照模板显示。你可以认为它是模型和模板的桥梁。
系统对app有一个约定:如果你使用了Django的数据库层(模型),你 必须创建一个django app。模型必须在这个app中存在。
5启动
在cmd中进入项目目录(cd d:*/mysite ),执行以下命令:
python manage.py runserver 0.0.0.0:8000
在浏览器中输入 127.0.0.1:8000,若能成功访问则表示启动成功
6添加web工程页面
打开test_pr/views.py文件,输入以下内容
-
from django.http import HttpResponse -
def sayHello(request): -
s = 'Hello World!' -
current_time = datetime.datetime.now() -
html = '<html><head></head><body><h1> %s </h1><p> %s </p></body></html>' % (s, current_time) -
return HttpResponse(html)
7url映射的配置
打开url.py文件
-
from django.conf.urls import url -
from test_pr import views -
urlpatterns = [ -
# url(r'^admin/', admin.site.urls), -
url(r'^$', views.sayHello), -
]
重启服务,访问http://localhost:8000/
8逻辑和页面分离
8.1在模板目录下创建一个student.html文件,并写入以下代码
-
<!DOCTYPE html> -
<html> -
<head> -
<title>hello</title> -
</head> -
<body> -
<ul> -
{% for student in students %} -
<li> -
id:{{ student.id }},姓名:{{ student.name }},age: {{ student.age }} -
</li> -
{% endfor %} -
</ul> -
</body> -
</html>
8.2修改 views.py文件,添加方法showStudents()
-
def showStudents(request): -
list = [{id: 1, 'name': 'Jack'}, {id: 2, 'name': 'Rose'}] -
return render_to_response('student.html',{'students': list})
8.3.添加url映射,打开url.py文件
-
from django.conf.urls import url -
from test_pr import views -
urlpatterns = [ -
# url(r'^admin/', admin.site.urls), -
url(r'^$', views.sayHello), -
url(r'^showStudents$', showStudents), -
]
8.4.修改settings.py模板配置:'DIRS': [BASE_DIR+r'\templates'],
-
TEMPLATES = [ -
{ -
'BACKEND': 'django.template.backends.django.DjangoTemplates', -
'DIRS': [BASE_DIR+"/templates", ], -
'APP_DIRS': True, -
'OPTIONS': { -
'context_processors': [ -
'django.template.context_processors.debug', -
'django.template.context_processors.request', -
'django.contrib.auth.context_processors.auth', -
'django.contrib.messages.context_processors.messages', -
], -
}, -
}, -
]
8.5.重启服务,访问http://localhost:8000/showStudents,出现:
原文:http://code.ziqiangxuetang.com/django/django-models.html
9.连接数据库
首先需要安装数据库驱动啦,即mysql_python,
如果你没安装 mysql 驱动,可以执行以下命令安装:
pip install mysqlclient
9.1配置数据库连接,打开settings.py文件编写代码
-
DATABASES = { -
'default': { -
'ENGINE': 'django.db.backends.mysql', //数据库的类型 -
'NAME': 'mysite', //所使用的的数据库的名字 -
'USER': 'root', //数据库服务器的用户 -
'PASSWORD': '123456', //密码 -
'HOST': 'localhost', //主机 -
'PORT': '3306', //端口 -
} -
}
修改完后进入DOS进入项目目录下执行python manage.py shell命令启动交互界面输入一下代码验证数据库配置是否成功。没报错则成功!
>>> from django.db import connection
>>> cursor = connection.cursor()
10.创建模型
在Django中使用数据库布局的第一步是将其表述为Python代码。
文件中每个class相当于单个数据库表,每个属性也是这个表中的一个字段。 属性名就是字段名,它的类型(例如 CharField )相当于数据库的字段类型 (例如 varchar )。
10.1打开test_pr目录下的models.py
-
# -*- coding: utf-8 -*- -
from __future__ import unicode_literals -
from django.db import models -
# Create your models here. -
class Student(models.Model): -
name = models.CharField(max_length=20)
字段
-
1、models.AutoField 自增列= int(11) -
如果没有的话,默认会生成一个名称为 id 的列,如果要显示的自定义一个自增列,必须将给列设置为主键 primary_key=True。 -
2、models.CharField 字符串字段 -
必须 max_length 参数 -
3.models.DateField 日期类型 date -
对于参数,auto_now =True则每次更新都会更新这个时间;auto_now_add 则只是第一次创建添加,之后的更新不再改变。 -
4.models.DateTimeField 日期类型 datetime -
同DateField的参数 -
5.models.EmailField 字符串类型(正则表达式邮箱)=varchar -
对字符串进行正则表达式 -
6.models.FloatField 浮点类型= double -
7.models.IntegerField 整形 -
8.models.SmallIntegerField 数字 -
数据库中的字段有:tinyint、smallint、int、bigint -
9、models.TextField 字符串=longtext -
10、models.TimeField 时间 HH:MM[:ss[.uuuuuu]] -
11、models.URLField 字符串,地址正则表达式 -
12、models.BinaryField 二进制 -
13、models.ImageField图片 -
14、models.FilePathField文件
参数
-
1、null=True -
数据库中字段是否可以为空 -
2、blank=True -
django的Admin中添加数据时是否可允许空值 -
3、primary_key =False -
主键,对AutoField设置主键后,就会代替原来的自增 id 列 -
4、auto_now 和 auto_now_add -
auto_now 自动创建---无论添加或修改,都是当前操作的时间 -
auto_now_add 自动创建---永远是创建时的时间 -
5、choices -
GENDER_CHOICE =( -
(u'M', u'Male'), -
(u'F', u'Female'), -
) -
gender = models.CharField(max_length=2,choices = GENDER_CHOICE) -
6、max_length -
7、default 默认值 -
8、verbose_name Admin中字段的显示名称 -
9、name|db_column 数据库中的字段名称 -
10、unique=True 不允许重复 -
11、db_index =True 数据库索引 -
12、editable=True 在Admin里是否可编辑
11. 激活 模型
打开settings.py 文件,找到 INSTALLED_APPS 设置,NSTALLED_APPS 告诉 Django 项目哪些 app 处于激活状态
-
INSTALLED_APPS = ( -
'django.contrib.auth', -
'django.contrib.contenttypes', -
'django.contrib.sessions', -
'django.contrib.sites', -
'test_pr', -
)
12.将新建的models同步数据库
# Django 1.7 及以上的版本需要用以下命令
-----------------------------------------------------------------------------------------------------------------
步骤里面第一步将会在查询当前MySQL和本地的models的差异,生成合并的代码。
第二步是将合并代码导入数据库。
cmd进入项目目录执行以下命令:
-
python manage.py makemigrations -
python manage.py migrate
# Django 1.6.x 及以下
----------------------------------------------------------------------------------------------------------------
用下面的命令对校验模型的有效性:
python manage.py validate
看到 0 errors found 消息,一切正常。继续:
运行下面的命令来生成 CREATE TABLE 语句:
python manage.py sqlall test_pr
sqlall 命令并没有在数据库中真正创建数据表,只是把SQL语句段打印出来。
运行 syncdb 命令创建表
python manage.py syncdb
--------------------------------------------------------------------------------------------------------
所有的数据库查找都遵循一个通用模式:调用模型的管理器来查找数据。
13.models对数据库增删查改
原文:http://python.usyiyi.cn/translate/django_182/ref/models/instances.html
打开models.py文件
方式一:
-
from django.db import models -
class Student(models.Model): -
name= models.CharField(max_length=20) -
@classmethod -
def create(cls, name -
student = cls(name=name) -
# do something with the book -
return student -
student = Student.create("zhansan")
方式二(推荐):
-
from django.db import models -
# Create your models here. -
class Student(models.Model): -
# 如果没有models.AutoField,默认会创建一个id的自增列 -
name = models.CharField(max_length=20) -
# model的字符串表现形式 -
def __unicode__(self): -
return self.name -
objects = StudentManager() -
class StudentManager(models.Manager): -
def create_student(self, name): -
student = self.create(name=name) -
# do something with the book -
return student
原文:https://my.oschina.net/leeyd/blog/367688
增:create()
objects.create(name = 'test') # 新增name字段的值为test
删:delete()
objects.all().delete() # 删除表中全部数据
objects.get(aa='test').delete() # 删除一条aa等于'test'的数据
objects.filter(aa='123').delete() #过滤出aa字段等于123的都删除
改:update()
get(id=id).update(name=name)
查:all()、get()
get(id=id) # 查询单条数据
filter(name=name) # 查询匹配条件的多条数据
filter(name__contains=name) # 模糊查询;name为查询的字段名
filter(name__contains=name)[0:5] # [0]显示第一条 [0:2]会显示前两条,切片不支持负数
dome
# models.py
-
# -*- coding: utf-8 -*- -
from __future__ import unicode_literals -
from django.db import models -
class StudentManager(models.Manager): -
def create_student(self, name): -
# 方式一 -
# student = Student(name = name) -
# # 保存到数据库 -
# student.save() -
# 方式二(推荐) -
student = self.create(name=name) -
return student -
def select_all(self): -
# 查询全部 -
list = self.all() -
return list -
def select_one(self, name): -
# a = [] -
# # 查询单条数据 -
# student = self.get(id=id) -
# a.append(student) -
# return a -
# 查询匹配条件的多条数据 -
# student = self.filter(name=name) -
# 模糊查询 -
student = self.filter(name__contains=name) -
# 根据字段内容排序后展示数据,根据字段内容逆向排序后展示数据,加一个负号order_by('-name') -
tt = student.order_by('name') -
# 限制数据条数, 相当于mysql limit -
tt1 = self.filter(name__contains=name)[0:5] # [0]显示第一条 [0:2]会显示前两条,切片不支持负数 -
return tt1 -
def updata_student(self, id, name): -
self.get(id=id).update(name=name) # update可多条update(name=name, bb="wahaha") -
# Create your models here. -
class Student(models.Model): -
# 如果没有models.AutoField,默认会创建一个id的自增列 -
name = models.CharField(max_length=20) -
# model的字符串表现形式 -
def __unicode__(self): -
return self.name -
objects = StudentManager()
错误:
Python3:Django连接Mysql数据库时出错,'Did you install mysqlclient or MySQL-python?'
一、原因
因为Python版本问题,MySQLdb只能在python2中用,在python3中,已经淘汰,不能使用了。
二、解决方案
下载安装pymysql,然后
在django项目中根目录下的__init__.py文件中添加两行代码即可。
假如是开发对应的子模块模型,那么在对应模型目录下的__init__.py文件中添加两行代码即可。
import pymysql pymysql.install_as_MySQLdb()
来源:CSDN
作者:qq_41909666
链接:https://blog.csdn.net/qq_41909666/article/details/81193490