1.23 django框架学习

执行以下操作:
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 执行真正的迁移
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值