install Django
- install Django: pip install django -i https://pypi.douban.com/simple/
- 检测安装是否成功:python -m django --version
step 1:create project name
- 第一种方式: django-admin startproject bysms
- 第二种方式:
- step 1:mkdir bysms && cd bysms
- step 2: django-admin startproject config .
step 2: 运行项目:
第一种方式:python manage.py runserver 127.0.0.1:8088 //可修改端口
第二种方式:python manage.py runserver 0.0.0.0:80
- settings.py 设置运行访问网站的IP ALLOWED_HOSTS = [‘0.0.0.0’]
step 3: 创建APP功能模块
Django 中的一个app 就是项目里面的一个应用模块的意思。
- 创建销售模块
- setp 1: python manage.py startapp sales
- setp 2: 修改url请求规则请求的 url 地址 是 /sales/orders/ , 就由 views.py 里面的函数 listorders 来处理, 返回一段字符串给浏览器。
views.py添加代码
from django.http import HttpResponse
def listorders(request):
return HttpResponse("下面是系统中所有的订单信息。。。")
路由优化,在模块下面创建子路由,跟主路由结合。
注: 当访问 sales/orders/路径的时候。 会先去主路由,匹配到路径sales之后,会进入到include,下面的orders进行访问,
setp 1: 在子模块下面创建urls.py文件(下面导入的views是提取创建好的如下)
# urls.py
from django.urls import path
from . import views
urlpatterns = [
path('orders/', views.listorders),
]
# views.PY
from django.http import HttpResponse
# Create your views here.
def listorders(request):
return HttpResponse("sale/views/ 的 listorders函数")
step 2: 修改主url路由文件 bysms/urls.py
from django.contrib import admin
# 导入一个include函数
from django.urls import path, include
from sales.views import listorders
urlpatterns = [
path('admin/', admin.site.urls),
# 凡是 url 以 sales/ 开头的,
# 都根据 sales.urls 里面的 子路由表进行路由
path('sales/', include('sales.urls')),
]
step 4: 创建数据库
目前使用自带的,后续改成mysql只需要修改配置就可以
下载工具:https://github.com/pawelsalawa/sqlitestudio/releases
项目中数据库的配置在 bysms/settings.py 中 DATABASES
清空数据库 python manage.py flush
创建超级管理员 python manage.py createsuperuser
修改用户密码 python manage.py changepassword username
导出数据 导入数据 python manage.py dumpdata appname > appname.json
python manage.py loaddata appname.json
项目中数据库的配置在 bysms/settings.py 中,这里
一:执行命令创建数据库: python manage.py migrate
工具打开这个文件
这种 通过 对象 操作数据库 的方法 被称之为 ORM
定义我们的 数据库表
创建一个名为common的应用目录, 里面存放我们项目需要的一些公共的表的定义
python manage.py startapp common
common/models.py
from django.db import models
class Customer(models.Model):
# 客户名称
name = models.CharField(max_length=200)
# 联系电话
phonenumber = models.CharField(max_length=200)
# 地址
address = models.CharField(max_length=200)
CharField 对象,对应 varchar类型的数据库字段
可以查看语法:https://docs.djangoproject.com/en/2.0/ref/models/fields/#model-field-types
创建好之后要告诉Django: 我们的 common 应用中 需要你关注, 因为其中包含了 数据库Model的定义。
settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 加入下面这行
'common.apps.CommonConfig',
]
生成命令:python manage.py makemigrations common
Migrations for ‘common’:
common\migrations\0001_initial.py
- Create model Customer
这个命令,告诉Django , 去看看common这个app里面的models.py ,我们已经修改了数据定义, 你现在去产生相应的更新脚本。
执行一下,会发现在 common\migrations 目录下面出现了0001_initial.py, 这个脚本就是相应要进行的数据库操作代码。
最后一步真正创建成功:
注意
如果以后我们修改了Models.py 里面的库表的定义,都需要再次运行 python manage.py makemigrations common 和 python manage.py migrate 命令,使数据库同步该修改结果
Django提供了一个管理员操作界面可以方便的 添加、修改、删除你定义的 model 表数据。
首先,我们需要创建 一个超级管理员账号。
进入到项目的根目录,执行如下命令,依次输入你要创建的管理员的 登录名:admin、email:johncol@qq.com、密码:11111111。
python manage.py createsuperuser
然后我们需要修改应用里面的 管理员 配置文件 common/admin.py,注册我们定义的model类。这样Django才会知道
from django.contrib import admin
from .models import Customer
admin.site.register(Customer)
http://127.0.0.1/admin/
数据库配置中文
settings.py 中 MIDDLEWARE
admin界面语言本地化
'django.middleware.locale.LocaleMiddleware',
读取数据库数据
Django 中 对数据库表的操作, 应该都通过 Model对象 实现对数据的读写,而不是通过SQL语句。
实现一个功能:浏览器访问 sales/customers/ 服务端就返回系统中所有的客户记录给浏览器。
sales/views.py 中,定义一个listcustomers 函数
# 导入 Customer 对象定义
from common.models import Customer
def listcustomers(request):
# 返回一个 QuerySet 对象 ,包含所有的表记录
# 每条表记录都是是一个dict对象,
# key 是字段名,value 是 字段值
qs = Customer.objects.values()
# 定义返回字符串
retStr = ''
for customer in qs:
for name,value in customer.items():
retStr += f'{name} : {value} | '
# <br> 表示换行
retStr += '<br>'
return HttpResponse(retStr)
过滤条件
def listcustomers(request):
# 返回一个 QuerySet 对象 ,包含所有的表记录
qs = Customer.objects.values()
# 检查url中是否有参数phonenumber
ph = request.GET.get('phonenumber',None)
# 如果有,添加过滤条件
if ph:
qs = qs.filter(phonenumber=ph)
# 定义返回字符串
retStr = ''
for customer in qs:
for name,value in customer.items():
retStr += f'{name} : {value} | '
# <br> 表示换行
retStr += '<br>'
return HttpResponse(retStr)
http://www.byhy.net/tut/webdev/django/07/