执行以下操作:
C:\Users\13987>d:
D:\>cd workspace_python
D:\workspace_python>cd work_cmd_py_2024
D:\workspace_python\work_cmd_py_2024>django-admin startproject lesson01
回车,会得到一个lesson01文件夹,还有一层lesson01文件夹和 manage.py文件
在内层的lesson01文件夹中:还包含:__init__(初始化文件)、settings(配置)、urls(路由)、wsgi(连接网络)
wsgi == web server gateway interface 网络服务网关接口(派生自CGI)
创建好django项目后
修改了 settings.py文件
(1)修改databases(数据源)
'ENGINE' : 'django.db.backends.mysql',
'NAME' : 'lesson01', # 真实的数据库的名称,即:database名称
'HOST' : 'localhost',
'PORT' : '3306',
'USER' : 'root', # 真实数据库用户
'PASSWORD' : 'hzyc2015', # 真实数据库密码
'TEST' : {'CHARSET': 'utf8'},
(2)修改语言和时区
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
(3)在__init__.py 文件中,增加pymysql(前提:pip install pymysql)
文件本来是空的,增加如下两行
import pymysql
pymysql.install_as_MySQLdb()
(4)创建数据库(mysql知识)
create database lesson01
【**】启动指令,进入到lesson01这层目录,再输入以下指令
python manage.py runserver
访问:http://localhost:8000/ 就会提示django安装成功
使用ctrl+C退出服务(django服务终止)
【**】在Django服务上,添加我们自己的app(应用程序)
指令: python manage.py startapp myApp01
会在manage.py同目录下出现myApp01文件夹
(5)再次修改settings.py文件
在 INSTALLED_APPS 里面增加我们的app
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myApp01', # 这里是新增的
]
(6)在TEMPLATES位置,增加配置
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',
],
},
},
]
【同时】在manage.py同目录下,创建templates文件夹
---------------------------------------------------------------------
在templates下创建一个html文件,如何去通过django服务器访问
uniform resource locator 统一资源定位器 URL
【***】修改 urls.py(路由) 文件,增加urlpatterns配置
请求url,并不是直接请求页面,而是请求一个view(视图组件)
浏览器地址栏输入一个url ----- urls.py中去找 ---- views.py中定义的函数 ---- 返回一个html页面(必须在templates里)
--------------------- 在 models.py 中创建模型-----------------------
模型是以类的形式出现的
class 模型名称(models.Model):
属性 ---- 对应数据表里的字段(列)
【代码】
from django.db import models
from datetime import datetime
# Create your models here.
# model --- 表
# field --- 字段(列)
class Component(models.Model):
# 必须包含主键:如果没有提供主键,django会自动创建一个主键(id)自增整型
# 编号,默认情况下,创建的属性,不允许为null(在表中)
code = models.IntegerField()
# 配件名称,如果是char(字符属性),必须提供最大长度
cpName = models.CharField(max_length=40)
# 可以提供默认值,但是这个默认值并不是在数据表中创建默认值(缺省值)
# 而是在model中生效
cpDate = models.DateTimeField(default=datetime.now)
【同步到数据库中】:ORM == object-relation mapping 对象关系映射,意思:把模型 映射成 关系型数据库表
指令:python manage.py makemigrations myApp01 迁移 == migration,migrate动词
指令2:python manage.py migrate 执行真正的迁移
【注意】:首次执行 migrate 会时间稍长,因为会迁移django自带的表
迁移的表名称 == app名_model名
【**如果需要向model中存储一条记录】:
从html页面,请求某个view,在view中对model进行存储,然后给用户一个响应(存储成功或失败)
【**在创建model的时候】
可以使用约束:
primary key 主键: primary_key=True 指定某个列是主键
指定列名(约束) db_column=列名(和model的属性名不同)
非空约束not null null=True
唯一性约束unique unique=True
默认值约束 default=默认值(不影响数据库)
类型:
IntegerField
CharField 必须有max_length
DateTimeField
DecimalField max_digits, decimal_places
FloatField
【通过 model 从数据库获取数据,显示到页面】
请求到对应view,在view中,使用model的all、filter等方法,获取数据库中的数据
得到的数据是一个线性结构 List<object表中的一行数据>,通过context对象传递到页面(参数是字典形式)
循环显示:for需要endfor结束,{{cp.列(表里的column),这不是model的属性field}}
<table style="width:600px; line-height:35px;">
<tbody>
{% for cp in cp999 %}
<tr>
<td>{{cp.id}}</td>
<td>{{cp.code}}</td>
<td>{{cp.cpName}}</td>
<td>{{cp.cpDate}}</td>
</tr>
{% endfor %}
</tbody>
</table>
def ind1(request):
cd = {"name":"桑木"}
return render(request,'in.html',context=cd)
def save1(request):
c1 = request.POST.get("ccode")
n2 = request.POST.get("ccname")
mobj = models.Component(code = c1,cname = n2)
mobj.save()
return HttpResponse('存储成功')
def find(request):
if request.method == 'GET': #连数据库显示数据
ccList = models.Component.objects.all()
ctx = {"cp0":ccList}
return render(request,"show.html",context=ctx)
elif request.method == 'POST':
co = request.POST.get("bycode")
cha = request.POST.get("query")
if cha =="jing": #按条件精确查询
ccList = models.Component.objects.filter(code = co)
ctx = {"ji":ccList[1]}
return render(request,"danshow.html",context=ctx)
elif cha =="mohu": #模糊查询
ccList = models.Component.objects.filter(code__contains = co)
ctx = {"cp0":ccList}
return render(request,"show.html",context=ctx)
class Component(models.Model):
code = models.IntegerField()
cname = models.CharField(max_length = 30)
cdate = models.DateTimeField(default=datetime.now)
【同步到数据库中】:ORM == object-relation mapping 对象关系映射,意思:把模型 映射成 关系型数据库表
指令:python manage.py makemigrations myApp01 迁移 == migration,migrate动词
指令2:python manage.py migrate 执行真正的迁移