轉(zhuǎn)載自https://blog.csdn.net/xm_csdn/article/details/74419683
創(chuàng)建項(xiàng)目
原文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數(shù)據(jù)庫
原文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環(huán)境
1創(chuàng)建web服務(wù)器:
使用cmd命令進(jìn)入到存放項(xiàng)目的目錄中執(zhí)行以下命令:
python django-admin.py startproject mysite
成功后會(huì)在目錄中出現(xiàn) mysite 目錄,此處創(chuàng)建的為開發(fā)服務(wù)器
2創(chuàng)建app:
一個(gè)項(xiàng)目中包含一個(gè)或多個(gè)這樣的app,。app可以理解為一塊功能集合,。比如產(chǎn)品管理模塊就包含增刪該查等功能,可以把產(chǎn)品管理叫做一個(gè)app,。每個(gè)Django app都有獨(dú)立的models,,views等,易移植和被復(fù)用
使用cmd命令進(jìn)入到mysite目錄下(創(chuàng)建的web服務(wù)器目錄)執(zhí)行以下命令
python manage.py startapp test_pr
test_pr才是web應(yīng)用程序
3創(chuàng)建模板文件的目錄
在項(xiàng)目根目錄下新建一個(gè)templates目錄
4目錄文件說明
子目錄mysite下表示工程的全局配置,分別為setttings.py,、urls.py和wsgi.py,其中setttings.py包括了系統(tǒng)的數(shù)據(jù)庫配置,、應(yīng)用配置和其他配置,urls.py則表示web工程Url映射的配置,。
子目錄test_pr則是在該工程下創(chuàng)建的app,,包含了models.py、tests.py和views.py等文件
templates目錄則為模板文件的目錄
manage.py是Django提供的一個(gè)管理工具,,可以同步數(shù)據(jù)庫等等
-----------------------------------------------------------------------------------------------------------------------------------------------
Django 里更關(guān)注的是模型(Model),、模板(Template)和視圖(Views),Django 也被稱為 MTV 框架 ,。
在 MTV 開發(fā)模式中:
M 代表模型(Model),,即數(shù)據(jù)存取層。該層處理與數(shù)據(jù)相關(guān)的所有事務(wù):如何存取,、如何確認(rèn)有效性,、包含哪些行為以及數(shù)據(jù)之間的關(guān)系等
T 代表模板(Template),即表現(xiàn)層,。該層處理與表現(xiàn)相關(guān)的決定:如何在頁面或其他類型文檔中進(jìn)行顯示,。
V代表View,業(yè)務(wù)邏輯層,。這一層包含訪問模型的邏輯和按照模板顯示,。你可以認(rèn)為它是模型和模板的橋梁。
系統(tǒng)對(duì)app有一個(gè)約定:如果你使用了Django的數(shù)據(jù)庫層(模型),,你 必須創(chuàng)建一個(gè)django app,。模型必須在這個(gè)app中存在。
5啟動(dòng)
在cmd中進(jìn)入項(xiàng)目目錄(cd d:*/mysite ),執(zhí)行以下命令:
python manage.py runserver 0.0.0.0:8000
在瀏覽器中輸入 127.0.0.1:8000,,若能成功訪問則表示啟動(dòng)成功
6添加web工程頁面
打開test_pr/views.py文件,,輸入以下內(nèi)容
-
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),
-
]
重啟服務(wù),訪問http://localhost:8000/
8邏輯和頁面分離
8.1在模板目錄下創(chuàng)建一個(gè)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.重啟服務(wù),,訪問http://localhost:8000/showStudents,,出現(xiàn):
原文:http://code./django/django-models.html
9.連接數(shù)據(jù)庫
首先需要安裝數(shù)據(jù)庫驅(qū)動(dòng)啦,即mysql_python,,
如果你沒安裝 mysql 驅(qū)動(dòng),,可以執(zhí)行以下命令安裝:
pip install mysqlclient
9.1配置數(shù)據(jù)庫連接,打開settings.py文件編寫代碼
-
DATABASES = {
-
'default': {
-
'ENGINE': 'django.db.backends.mysql', //數(shù)據(jù)庫的類型
-
'NAME': 'mysite', //所使用的的數(shù)據(jù)庫的名字
-
'USER': 'root', //數(shù)據(jù)庫服務(wù)器的用戶
-
'PASSWORD': '123456', //密碼
-
'HOST': 'localhost', //主機(jī)
-
'PORT': '3306', //端口
-
}
-
}
修改完后進(jìn)入DOS進(jìn)入項(xiàng)目目錄下執(zhí)行python manage.py shell命令啟動(dòng)交互界面輸入一下代碼驗(yàn)證數(shù)據(jù)庫配置是否成功,。沒報(bào)錯(cuò)則成功,!
>>> from django.db import connection
>>> cursor = connection.cursor()
10.創(chuàng)建模型
在Django中使用數(shù)據(jù)庫布局的第一步是將其表述為Python代碼,。
文件中每個(gè)class相當(dāng)于單個(gè)數(shù)據(jù)庫表,每個(gè)屬性也是這個(gè)表中的一個(gè)字段,。 屬性名就是字段名,,它的類型(例如 CharField )相當(dāng)于數(shù)據(jù)庫的字段類型 (例如 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)
-
如果沒有的話,,默認(rèn)會(huì)生成一個(gè)名稱為 id 的列,如果要顯示的自定義一個(gè)自增列,,必須將給列設(shè)置為主鍵 primary_key=True,。
-
2、models.CharField 字符串字段
-
必須 max_length 參數(shù)
-
3.models.DateField 日期類型 date
-
對(duì)于參數(shù),,auto_now =True則每次更新都會(huì)更新這個(gè)時(shí)間,;auto_now_add 則只是第一次創(chuàng)建添加,之后的更新不再改變,。
-
4.models.DateTimeField 日期類型 datetime
-
同DateField的參數(shù)
-
5.models.EmailField 字符串類型(正則表達(dá)式郵箱)=varchar
-
對(duì)字符串進(jìn)行正則表達(dá)式
-
6.models.FloatField 浮點(diǎn)類型= double
-
7.models.IntegerField 整形
-
8.models.SmallIntegerField 數(shù)字
-
數(shù)據(jù)庫中的字段有:tinyint,、smallint、int,、bigint
-
9,、models.TextField 字符串=longtext
-
10、models.TimeField 時(shí)間 HH:MM[:ss[.uuuuuu]]
-
11,、models.URLField 字符串,地址正則表達(dá)式
-
12,、models.BinaryField 二進(jìn)制
-
13,、models.ImageField圖片
-
14、models.FilePathField文件
-
-
-
參數(shù)
-
1,、null=True
-
數(shù)據(jù)庫中字段是否可以為空
-
2,、blank=True
-
django的Admin中添加數(shù)據(jù)時(shí)是否可允許空值
-
3、primary_key =False
-
主鍵,,對(duì)AutoField設(shè)置主鍵后,,就會(huì)代替原來的自增 id 列
-
4、auto_now 和 auto_now_add
-
auto_now 自動(dòng)創(chuàng)建---無論添加或修改,,都是當(dāng)前操作的時(shí)間
-
auto_now_add 自動(dòng)創(chuàng)建---永遠(yuǎn)是創(chuàng)建時(shí)的時(shí)間
-
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 默認(rèn)值
-
8,、verbose_name Admin中字段的顯示名稱
-
9、name|db_column 數(shù)據(jù)庫中的字段名稱
-
10,、unique=True 不允許重復(fù)
-
11,、db_index =True 數(shù)據(jù)庫索引
-
12,、editable=True 在Admin里是否可編輯
11. 激活 模型
打開settings.py 文件,找到 INSTALLED_APPS 設(shè)置,,NSTALLED_APPS 告訴 Django 項(xiàng)目哪些 app 處于激活狀態(tài)
-
INSTALLED_APPS = (
-
'django.contrib.auth',
-
'django.contrib.contenttypes',
-
'django.contrib.sessions',
-
'django.contrib.sites',
-
'test_pr',
-
)
12.將新建的models同步數(shù)據(jù)庫
# Django 1.7 及以上的版本需要用以下命令
-----------------------------------------------------------------------------------------------------------------
步驟里面第一步將會(huì)在查詢當(dāng)前MySQL和本地的models的差異,,生成合并的代碼。
第二步是將合并代碼導(dǎo)入數(shù)據(jù)庫,。
cmd進(jìn)入項(xiàng)目目錄執(zhí)行以下命令:
-
python manage.py makemigrations
-
python manage.py migrate
# Django 1.6.x 及以下
----------------------------------------------------------------------------------------------------------------
用下面的命令對(duì)校驗(yàn)?zāi)P偷挠行裕?/p>
python manage.py validate
看到 0 errors found 消息,,一切正常。繼續(xù):
運(yùn)行下面的命令來生成 CREATE TABLE 語句:
python manage.py sqlall test_pr
sqlall 命令并沒有在數(shù)據(jù)庫中真正創(chuàng)建數(shù)據(jù)表,,只是把SQL語句段打印出來,。
運(yùn)行 syncdb 命令創(chuàng)建表
python manage.py syncdb
--------------------------------------------------------------------------------------------------------
所有的數(shù)據(jù)庫查找都遵循一個(gè)通用模式:調(diào)用模型的管理器來查找數(shù)據(jù)。
13.models對(duì)數(shù)據(jù)庫增刪查改
原文:http://python./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,,默認(rèn)會(huì)創(chuàng)建一個(gè)id的自增列
-
name = models.CharField(max_length=20)
-
# model的字符串表現(xiàn)形式
-
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() # 刪除表中全部數(shù)據(jù)
objects.get(aa='test').delete() # 刪除一條aa等于'test'的數(shù)據(jù)
objects.filter(aa='123').delete() #過濾出aa字段等于123的都刪除
改:update()
get(id=id).update(name=name)
查:all(),、get()
get(id=id) # 查詢單條數(shù)據(jù)
filter(name=name) # 查詢匹配條件的多條數(shù)據(jù)
filter(name__contains=name) # 模糊查詢;name為查詢的字段名
filter(name__contains=name)[0:5] # [0]顯示第一條 [0:2]會(huì)顯示前兩條,,切片不支持負(fù)數(shù)
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)
-
# # 保存到數(shù)據(jù)庫
-
# student.save()
-
# 方式二(推薦)
-
student = self.create(name=name)
-
return student
-
-
def select_all(self):
-
# 查詢?nèi)?/code>
-
list = self.all()
-
return list
-
-
def select_one(self, name):
-
# a = []
-
# # 查詢單條數(shù)據(jù)
-
# student = self.get(id=id)
-
# a.append(student)
-
# return a
-
# 查詢匹配條件的多條數(shù)據(jù)
-
# student = self.filter(name=name)
-
# 模糊查詢
-
student = self.filter(name__contains=name)
-
# 根據(jù)字段內(nèi)容排序后展示數(shù)據(jù),,根據(jù)字段內(nèi)容逆向排序后展示數(shù)據(jù),加一個(gè)負(fù)號(hào)order_by('-name')
-
tt = student.order_by('name')
-
-
# 限制數(shù)據(jù)條數(shù), 相當(dāng)于mysql limit
-
tt1 = self.filter(name__contains=name)[0:5] # [0]顯示第一條 [0:2]會(huì)顯示前兩條,切片不支持負(fù)數(shù)
-
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,,默認(rèn)會(huì)創(chuàng)建一個(gè)id的自增列
-
name = models.CharField(max_length=20)
-
-
# model的字符串表現(xiàn)形式
-
def __unicode__(self):
-
return self.name
-
-
objects = StudentManager()
-
錯(cuò)誤:
Python3:Django連接Mysql數(shù)據(jù)庫時(shí)出錯(cuò),,'Did you install mysqlclient or MySQL-python?'
一、原因
因?yàn)镻ython版本問題,,MySQLdb只能在python2中用,,在python3中,已經(jīng)淘汰,,不能使用了,。
二、解決方案
下載安裝pymysql,,然后
在django項(xiàng)目中根目錄下的__init__.py文件中添加兩行代碼即可,。
假如是開發(fā)對(duì)應(yīng)的子模塊模型,那么在對(duì)應(yīng)模型目錄下的__init__.py文件中添加兩行代碼即可,。
import pymysql pymysql.install_as_MySQLdb()
|