python使用Django框架開發簡單項目

一、

(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輸出

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章