django 框架

  • 教程

https://djangobook.com/

  • 安装

首先需要虚拟环境

随便选一个目录 :  执行 

python -m virtualenv .

注意最后有个点

然后进入 Scripts 激活这个虚拟目录 :  

activate

激活后如果看到目录前出现 (selected folder name  ) 就算成功 (注意, 每次重启电脑后都要 activate )

最后安装 django

pip install django

安装成功后查看版本

python -m django --version

版本是 2.2.2

安装部分参考 :  https://stackoverflow.com/questions/35950740/virtualenv-is-not-recognized-as-an-internal-or-external-command-operable-prog

  •  Hello world

https://djangoforbeginners.com/hello-world/

安装完成 django之后 ,新建一个 app

django-admin startproject django_project

进入 app 执行

python manage.py migrate

此命令将会生成 sqllite 数据库

创建超级用户

python manage.py createsuperuser

lthxk ;  Piercing77 ;  mzcw2011@sina.cn

启动server

python manage.py runserver

将默认结构导入 sqllite数据库 ,  将models.py 的结构自动在数据库生成

python manage.py migrate

新建一个app ,  可以有多个app

python manage.py startapp blog

html templete store    https://themeforest.net

  • 怎么建一个简单的app

Building and deploying an Enterprise Django Web App in 16 hours

https://medium.com/python-pandemonium/building-and-deploying-an-enterprise-django-web-app-in-16-hours-79e018f7b94c


数据库部分 

  • 能不能直接用已有的数据库连接器比如 pymysql

不能, 必须在django的虚拟目录重新

pip install mysqlclient
  • 怎么连接 数据库

for  连接 : 修改 settings.py ,

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'shfuture',
        'USER': 'root',
        'PASSWORD': 'MYSQLTB',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}
  • 把表自动生成 类
python manage.py inspectdb > models.py

这样所有的表都会被定义在  models 里面

用新生成的 models.py 替换 pages 目录原有的即可

  • 怎么显示表或者查询结果

a)  视图直接显示

先 import  models

from pages.models import If190620190417

因为 models.py 在 pages 目录下

然后在视图写:

from django.shortcuts import render
from django.http import JsonResponse

# Create your views here.

from django.http import HttpResponse
from pages.models import If190620190527

from django.core import serializers


def homePageView(request):
    #return HttpResponse('Hello, World!')
    query_results = If190620190527.objects.all()
    #return JsonResponse(query_results)
    json_data = serializers.serialize('json', query_results)
    #return HttpResponse(json_data, mimetype='application/json')
    return HttpResponse(json_data)

参考 :  https://stackoverflow.com/questions/7287027/displaying-a-table-in-django-from-database

如果要显示的好看一点 , 用 django-tables2 ,  带分页和排序

django-tables2 安装 :

pip install django-tables2

安装成功显示

Successfully installed django-tables2-2.0.6

在 settings.py  加上  “django_tables2”,

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
	'pages.apps.PagesConfig',
    "django_tables2",
]
  • 如果已经用这个命令 python manage.py inspectdb > models.py  生成了 py 文件

但是之后又修改了表结构 ,怎么重新更新  models.py  ?


  • 怎么显示 matlibplot
  • 增删改   (CRUD)

https://rayed.com/posts/2018/05/django-crud-create-retrieve-update-delete/

  • how to debug , include step by step

https://www.bedjango.com/blog/how-debug-django-useful-tips/

  • How to call rest api

https://stackoverflow.com/questions/30259452/proper-way-to-consume-data-from-restful-api-in-django

如何把 admin 和 rest api 合起来, 就是说  ,admin register 的 model 是从 rest api 得来  , 而不是内部数据库

https://stackoverflow.com/questions/9013099/django-admin-using-restful-api-v-s-database

这个问题最接近 , 但是似乎没答案


  • django 要求表必须有 primary key

见 : https://stackoverflow.com/questions/40862994/django-error-unknown-column-categorytree-id-in-field-list

https://stackoverflow.com/questions/605896/django-querying-read-only-view-with-no-primary-key

  • 重要的概念 :

a)  什么是 migration

Migrations are Django’s way of propagating changes you make to your models (adding a field, deleting a model, etc.) into your database schema

注意是从 models ——> database

如果database 先发生改变, 怎么更新 models ?

这篇文章说的很详细 : https://stackoverflow.com/questions/30547580/django-update-models-py-when-database-changes

b) ORM  mean object relation mapping

当设置好 settings.py 的数据库连接后, 一旦 django create a model , mysql 那边会自动 建立相应的表

支持

  • PostgreSQL
  • MySQL
  • SQLite
  • Oracle

教程 :  https://djangobook.com/mdj2-models/

  • Django 支持的mysql 版本  : 大于等于  5.6

当前是  5.1 版本 , migrate 会出错

https://stackoverflow.com/questions/52730817/django-migrate-error-mysql-exceptions-programmingerror-1064-you-have-an-err

  • 找一个模板

去  https://themeforest.net  找 

admin templete

github 的  https://github.com/guohongze/adminset


  • admin

How to add models to admin.py :   https://www.dev2qa.com/how-to-add-models-to-django-admin-site/