環(huán)境介紹
很久之前有個(gè)java項(xiàng)目,后來(lái)由于調(diào)整將這個(gè)項(xiàng)目的前端給調(diào)沒(méi)了,就剩下數(shù)據(jù)庫(kù),所以之后添加賬號(hào)都是用mysql客戶(hù)端去連接數(shù)據(jù)庫(kù)去改表。
所以現(xiàn)在的環(huán)境是:mysql 數(shù)據(jù)庫(kù) password 是md5 加密
安裝Django
本次參考:http://www.jb51.net/article/42870.htm
http://blog.csdn.net/styyzxjq2009/article/details/39585323
http://www.runoob.com/django/django-model.html
pip 版本:9.0.1
django版本:1.11.2
本次采用pip安裝
pip install django
要連接mysql需要mysqp-python包,
mysql-python安裝:http://www.lxweimin.com/p/9ecf885013d6
創(chuàng)建第一個(gè)django項(xiàng)目
django-admin.py startproject HelloWorld
創(chuàng)建完成后我們可以查看下項(xiàng)目的目錄結(jié)構(gòu):
$ cd HelloWorld/
$ tree
.
|-- HelloWorld
| |-- __init__.py
| |-- settings.py
| |-- urls.py
| `-- wsgi.py
`-- manage.py
目錄說(shuō)明:
HelloWorld: 項(xiàng)目的容器。
manage.py: 一個(gè)實(shí)用的命令行工具,可讓你以各種方式與該 Django 項(xiàng)目進(jìn)行交互。
HelloWorld/init.py: 一個(gè)空文件,告訴 Python 該目錄是一個(gè) Python 包。
HelloWorld/settings.py: 該 Django 項(xiàng)目的設(shè)置/配置。
HelloWorld/urls.py: 該 Django 項(xiàng)目的 URL 聲明; 一份由 Django 驅(qū)動(dòng)的網(wǎng)站"目錄"。
HelloWorld/wsgi.py: 一個(gè) WSGI 兼容的 Web 服務(wù)器的入口,以便運(yùn)行你的項(xiàng)目。
啟動(dòng)項(xiàng)目
接下來(lái)我們進(jìn)入 HelloWorld 目錄輸入以下命令,啟動(dòng)服務(wù)器:
python manage.py runserver 0.0.0.0:8000
報(bào)錯(cuò):?jiǎn)?dòng)django后,不能訪(fǎng)問(wèn),報(bào)400錯(cuò)誤。
原因:沒(méi)有開(kāi)啟允許訪(fǎng)問(wèn)
處理:編輯HelloWorld目錄下setting.py ,把其中的
ALLOWED_HOSTS=[]改成ALLOWED_HOSTS=[''] ## 表示任意地址。頁(yè)面400
Django 提供了基于 web 的管理工具。
Django 自動(dòng)管理工具是 django.contrib 的一部分。你可以在項(xiàng)目的 settings.py 中的 INSTALLED_APPS 看到它:
/HelloWorld/HelloWorld/settings.py 文件代碼:
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',)
django.contrib是一套龐大的功能集,它是Django基本代碼的組成部分。
激活管理工具
通常我們?cè)谏身?xiàng)目時(shí)會(huì)在 urls.py 中自動(dòng)設(shè)置好,我們只需去掉注釋即可。
配置項(xiàng)如下所示:
/HelloWorld/HelloWorld/urls.py 文件代碼:
# urls.pyfrom django.conf.urls import urlfrom django.contrib import admin
urlpatterns = [ url(r'^admin/', admin.site.urls),]
當(dāng)這一切都配置好后,Django 管理工具就可以運(yùn)行了。
使用管理工具
啟動(dòng)開(kāi)發(fā)服務(wù)器,然后在瀏覽器中訪(fǎng)問(wèn) http://127.0.0.1:8000/admin/,得到如下界面:
創(chuàng)建django-admin管理員賬號(hào)
你可以通過(guò)命令 python manage.py createsuperuser 來(lái)創(chuàng)建超級(jí)用戶(hù),如下所示:
#cd HelloWord
# python manage.py createsuperuserUsername
(leave blank to use 'root'): admin
Email address: admin@runoob.com
Password:
Password (again):
Superuser created successfully.
[root@solar HelloWorld]#
之后輸入用戶(hù)名密碼登錄,界面如下:
創(chuàng)建Django app 相當(dāng)于項(xiàng)目的名稱(chēng),后面在models.py中定義的class(表名)數(shù)據(jù)庫(kù)中會(huì)以app名稱(chēng)命名開(kāi)始
一個(gè)項(xiàng)目中包含一個(gè)或多個(gè)這樣的app。app可以理解為一塊功能集合。比如產(chǎn)品管理模塊就包含增刪該查等功能,可以把產(chǎn)品管理叫做一個(gè)app。每個(gè)Django app都有獨(dú)立的models,views等,易移植和被復(fù)用。
DOS進(jìn)入項(xiàng)目目錄 執(zhí)行
cd HelloWorld
python manage.py startapp products
products/
__init__.py
models.py
tests.py
views.py
設(shè)置連接mysql
修改settings.py
vim HelloWorld/settings.py
DATABASES = {
'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
'ENGINE': 'django.db.backends.mysql',
'NAME': 'django',#數(shù)據(jù)庫(kù)名稱(chēng)
'USER': 'root',
'PASSWORD': '123456',
}
}
下面解釋一下,里面參數(shù)的意思:
ENGINE : 指定數(shù)據(jù)庫(kù)驅(qū)動(dòng),不同的數(shù)據(jù)庫(kù)這個(gè)字段不同,下面是常見(jiàn)的集中數(shù)據(jù)庫(kù)的ENGINE的寫(xiě)法:
django.db.backends.postgresql # PostgreSQL
django.db.backends.mysql # mysql
django.db.backends.sqlite3 # sqlite
django.db.backends.oracle # oracle
NAME: 指定的數(shù)據(jù)庫(kù)名,如果是sqlite的話(huà),就需要填數(shù)據(jù)庫(kù)文件的絕對(duì)位置
USER: 數(shù)據(jù)庫(kù)登錄的用戶(hù)名,mysql一般都是root
PASSWORD:登錄數(shù)據(jù)庫(kù)的密碼,必須是USER用戶(hù)所對(duì)應(yīng)的密碼
HOST: 由于一般的數(shù)據(jù)庫(kù)都是C/S結(jié)構(gòu)的,所以得指定數(shù)據(jù)庫(kù)服務(wù)器的位置,我們一般數(shù)據(jù)庫(kù)服務(wù)器和客戶(hù)端都是在一臺(tái)主機(jī)上面,所以一般默認(rèn)都填127.0.0.1
PORT:數(shù)據(jù)庫(kù)服務(wù)器端口,mysql默認(rèn)為3306
HOST和PORT都可以不填,使用默認(rèn)的配置,但是如果你有更改默認(rèn)配置的話(huà),就需要填入更改后的
配置完這,只是最簡(jiǎn)單的一步,下面就需要裝python連接mysql數(shù)據(jù)庫(kù)的驅(qū)動(dòng)程序,首先,需要安裝mysql的開(kāi)發(fā)包,在shell,里面運(yùn)行:
修改 products/models.py
from django.db import models
from django.contrib.auth.hashers import make_password, check_password
import hashlib
# Create your models here.
class Publisher(models.Model):#該類(lèi)與數(shù)據(jù)庫(kù)同步的時(shí)候會(huì)創(chuàng)建該表,如果使用之前的庫(kù)和表,class 后就寫(xiě)數(shù)據(jù)庫(kù)中你想要用的表
name = models.CharField(max_length=30)
address = models.CharField(max_length=50)
city = models.CharField(max_length=60)
state_province = models.CharField(max_length=30)
country = models.CharField(max_length=50)
website = models.URLField()
password = models.CharField(max_length=50)
def __unicode__(self):
return self.name
def save(self,*args,**kwargs): #設(shè)置password md5加密
self.password = hashlib.md5(self.password).hexdigest()
super(Publisher(你的類(lèi)名),self).save(*args,**kwargs)
class Author(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=40)
email = models.EmailField()
class Book(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField(Author)
publisher = models.ForeignKey(Publisher)
publication_date = models.DateField()
再次編輯settings.py,
# Application definition
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'products',
)
在命令行中運(yùn)行:
$ python manage.py migrate # 創(chuàng)建表結(jié)構(gòu)
$ python manage.py makemigrations products# 讓 Django 知道我們?cè)谖覀兊哪P陀幸恍┳兏?br>
$ python manage.py migrate products # 創(chuàng)建表結(jié)構(gòu)
看到幾行 "Creating table…" 的字樣,你的數(shù)據(jù)表就創(chuàng)建好了。
Creating tables ...
……
Creating table products_Author #我們自定義的表
……
表名組成結(jié)構(gòu)為:應(yīng)用名_類(lèi)名(如:products_Author)。
注意:盡管我們沒(méi)有在models給表設(shè)置主鍵,但是Django會(huì)自動(dòng)添加一個(gè)id作為主鍵。
這時(shí)進(jìn)入mysql,可以查看這些表已經(jīng)創(chuàng)建
最后 將你的Models加入到Admin管理中(是在頁(yè)面上顯示)
admin.py
from django.contrib import admin
# Register your models here.
from books.models import Publisher, Author, Book
class AuthorAdmin(admin.ModelAdmin):
list_display=('first_name','last_name','email')
search_fields=('first_name','last_name')
admin.site.register(Publisher)
admin.site.register(Author)
admin.site.register(Book)
當(dāng)這一切都配置好后,現(xiàn)在你將發(fā)現(xiàn)Django管理工具可以運(yùn)行了。 啟動(dòng)開(kāi)發(fā)服務(wù)器(如前:python manage.py runserver
),然后在瀏覽器中訪(fǎng)問(wèn):http://127.0.0.1:8000/admin/
就是簡(jiǎn)單的用戶(hù)登錄,然后就可以看到數(shù)據(jù)庫(kù)的表,可以可視化的操作這些表了~