一、
(1)使用idea生成一個python項目,安裝Django框架:
pip install django==1.8.2
(2)初始化項目:
django-admin startproject xxx //xxx為項目名稱
(3)初始化應用:
python manage.py startapp xxx //xxx為應用名稱
(4)在settings.py中注冊剛生成的應用:
INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'home', //這是我們剛生成的應用 )
(5)測試項目是否可以正常啟動:
python manage.py runserver IP:端口
瀏覽器訪問如下:
PS:Django默認使用的是sqlite3數據庫,可以根據model生成數據庫表,生成的文件在migrations目錄下:
(1)我們先在model中寫一個測試類:
from django.db import models # Create your models here. #學生類 class StuUser(models.Model): '''學生模型類''' #照片 studentName = models.CharField(max_length=255) studentNumber = models.CharField(max_length=255) picture = models.CharField(max_length=255) phoneNumber = models.CharField(max_length=255) address = models.CharField(max_length=255) createDate = models.DateTimeField() updateDate = models.DateTimeField()
(2)終端運行如下指令:
python manage.py makemigrations
運行后可以發現migrations目錄下多了一個0001_initial.py文件,就是我們model的遷移文件:
# -*- coding: utf-8 -*- from __future__ import unicode_literals from django.db import models, migrations class Migration(migrations.Migration): dependencies = [ ] operations = [ migrations.CreateModel( name='StuUser', fields=[ ('id', models.AutoField(verbose_name='ID', primary_key=True, serialize=False, auto_created=True)), ('studentName', models.CharField(max_length=255)), ('studentNumber', models.CharField(max_length=255)), ('picture', models.CharField(max_length=255)), ('phoneNumber', models.CharField(max_length=255)), ('address', models.CharField(max_length=255)), ('createDate', models.DateTimeField()), ('updateDate', models.DateTimeField()), ], ), ]
然后再運行如下指令:
python manage.py migrate
此時就會生成一個db.sqlite3文件,這是一個小型數據庫,我們需要安裝一個工具才能有可視化數據庫界面,由於項目使用的是mysql數據庫,后續需要更改對應數據庫配置,此處不過多贅述
二、django整合mysql
(1)django完成視圖搭建:(注意項目結構,我使用的idea生成的項目,需要刪除一層,使項目結構如下:)
其中homework為項目,home是我們運行如下指令初始化的應用:(一定要注意)
python manage.py startapp home
首先,我們在settings.py配置文件的TEMPLATES->DIRS中添加如下代碼:(指定模板路徑)
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(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', ], }, }, ]
應用中新建對應路徑的文件夾做為我們的view模板渲染層,進行前后端分離的項目就不需要這些操作了
home應用中的urls.py配置路由(默認生成的home應用沒有urls.py,從項目homework中復制一份):
from django.conf.urls import url
from home import views
urlpatterns = [
url(r'^index$',views.index),#首頁
]
home應用中的views.py文件中配置視圖:
from django.shortcuts import render # Create your views here. def index(request): '''首頁''' return render(request,'home/index.html')
項目的urls.py中引入應用的路由:
urlpatterns = [ url(r'^admin/', include(admin.site.urls)), url(r'^', include('home.urls')), ]
模板中新建index.html
index.html內容:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>首頁</title> </head> <body> <h1>首頁</h1> </body> </html>
然后運行
manage.py runserver 127.0.0.1:8080
這樣一個路由就配置好了
PS:簡單介紹以下Django路由的原理,如下圖所示:()
自定義404頁面:
settings.py修改如下配置:
DEBUG = False ALLOWED_HOSTS = ['127.0.0.1']
templates下新建404.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>首頁</title> </head> <body> <h1>頁面找不到</h1> </body> </html>
返回JSON數據:
views.py
from django.shortcuts import render from home import models from django.shortcuts import HttpResponse import json # Create your views here. def index_json(request): result = {"password": '111', "encrypt": '222'} return HttpResponse(json.dumps(result))
urls.py
from django.conf.urls import url from home import views urlpatterns = [ url(r'^index$',views.index),#首頁 url(r'^index_json$',views.index_json),#首頁 ]
瀏覽器訪問:localhost:8080/index_json
(2)配置mysql數據庫(settings.py文件中修改數據庫配置):
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'stu_user',//數據庫名稱 'USER': 'root', 'PASSWORD': 'root', 'HOST': 'localhost', 'PORT': '3306', } }
項目中新建model后,可以同步數據庫表,具體指令如下(此指令只能同步Django內置表):
python manage.py syncdb
其中,django_migrations是記錄數據庫遷移log日志,使用如下命令也可實現(會將自己的app model同步到數據庫 如果想要修改表結構,修改
model后執行如下指令無法同步,請查看django_migrations中的相關日志,刪除對應app的日志再執行即可):
python manage.py makemigrations
python manage.py migrate
PS:一對多模型實現:
models.py
from django.db import models # Create your models here. #學生類 class stu_user(models.Model): '''學生模型類''' #照片 student_name = models.CharField(max_length=255) student_number = models.CharField(max_length=255) picture = models.CharField(max_length=255) phone_number = models.CharField(max_length=255) address = models.CharField(max_length=255) create_date = models.DateTimeField() update_date = models.DateTimeField() #教育經歷類 class stu_experience(models.Model): '''學生模型類''' #照片 user = models.ForeignKey("stu_user", to_field='id', on_delete=models.CASCADE) begin_date = models.DateTimeField() end_date = models.DateTimeField() school = models.CharField(max_length=255) level = models.IntegerField()
views.py中測試新增數據:
from django.shortcuts import render from datetime import date from home import models # Create your views here. def index(request): '''首頁''' book = models.StuUser( studentName = '馮文哲' ) book.save() return render(request,'home/index.html')
一對多查詢,並格式化時間后json輸出:
models.py中定義如下類:
class DateEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj,datetime.datetime): return obj.strftime("%Y-%m-%d %H:%M:%S") else: return json.JSONEncoder.default(self,obj)
views.py中定義路由業務處理:
def one_to_many(request): print(request) student = models.stu_user.objects.get(id='1') result = [] exp = student.stu_experience_set.all() for item in exp: result.append(model_to_dict(item))#對象轉字典 print(type(serializers.serialize('json',exp))) print(type(json.loads(serializers.serialize('json',exp)))) student = model_to_dict(student)#對象轉字典 res = {'student':student,'exp':result}#字典類型 print(type(res)) return HttpResponse(json.dumps(res,cls=models.DateEncoder))#格式化日期,json輸出