django_day01
内容回顾
django处理浏览器的请求流程:
请求发送到wsgi wsgi封装了请求的相关数据(request)
django去匹配路径 根据路径判断要执行哪个函数
执行函数 函数执行具体的业务逻辑
函数返回响应 djgango返回 按照HTTP协议响应的格式进行返回
发请求的途径
在浏览器地址栏输入地址 回车 发出get请求
a标签 发出get请求
form表单 发出post请求
get和post区别
get 获取一个资源
?k1=v1&k2=v2 request.GET
get请求没有请求体
post 提交数据
request.POST
数据在请求体中
views.py
def login(request):
#业务逻辑
return 响应
HttpResponse('字符串') #返回一个字符串
render(request,'模板的文件名',{'k1':v1...})
redirect('地址')#重定向
request.method #请求方式 GET POSTORM
models.py
class Publisher(models.Model):
name = models.CharField(max_lenth=32) #varchar(32)
class Book(models.Model):
name = models.CharField(max_lenth=32) #varchar(32)
pub = modelsForeignKey(Publisher,on_delete=models.CASCADE)#一对多的对应关系 外键写在多的一个表中 表示和Publisher这个表又关系 第二个参数表示如果Publisher这个表中参数被删除 Book这个表中的数据也都被删除(默认的)
"""
on_delete 2.0版本后是必须填的
models.CASCADE 级联删除
models.PROTECT 保护
models.SET(v) 删除后设置为默认值
models.SETDEFAULT 删除后设置为默认值
models.SET_NULL 删除后设置为Null
models.DOTHING 什么都不做
"""
orm的操作
查
from app01 import models
models.Publisher.objects.all() # 获取所有的数据 QuerySet 对象列表
models.Publisher.objects.get(name='xxx',id='1') #获取一条存在且唯一的数据 对象
models.Publisher.objects.filter(name='xxx',id='1') #获取多条的数据 对象列表
ret = models.Book.objects.all()#对象列表
for book in ret:
print(book)
print(book.id,book.pk)
print(book.name)
print(boon.pub) #书籍所关联的出版社的对象
print(boon.pub_id) #书籍所关联的出版社的id
新增:
models.Publisher.objects.create(name='xxx') #新增的对象
models.Book.object.create(name='xxx',pub=出版社的对象) #新增的对象
models.Book.object.create(name='xxx',pub=出版社的id) #新增的对象删除:
models.Publisher.objects.get(pk=1).delete()
models.Publisher.objects.filter(pk=1).delete() #删除对象列表 批量删除
编辑:
book_obj.name = 'xxx'
book_obj.pub = 出版社对象
book_obj.pub_id = 出版社的id
book_obj.save() #保存到数据库
models.Book.objects.filter(pk=1).update(name='xx',pub_id=出版社的id) #批量更新6.模板的语法
return render(request,'模板的名称',{'k1':v1,'k2':v2...})
{{ k1 }} {{ k2 }}
for
{% for i in k1%}
{{ forloop.counter }}
{{ i }}
{% endfor %}
if
{% if 条件 %}
xxx
{% endif %}
{% if 条件1 %}
xxx
{% elif 条件2 %}
xxx
{% else %}
xxx
{% endif %}
django基础回顾
django相关命令
下载安装
pip install dajango==版本号 -i 国内源
创建django项目
django-admin startproject 项目名称
启动项目
切换到项目的根路径
python manage.py runserver 127.0.0.1:8080
python manage.py runserver 80 127.0.0.1:80#改端口。
python manage.py runserver 0.0.0.0:80 0.0.0.0:80#改地址。创建app
python manage.py startapp app的名称
数据库迁移的命令
python manage.py makemigrations #检测app下的model.py的变化 记录下变更记录
python manage.py migrate #迁移 将变更记录同步到数据库中
settings 配置
BASE_DIR 项目的根目录
INSTALLED APPS 注册的app
MIDDLEWARE 中间件
注释掉csrf的中间件 可以POST请求
TEMPLATES 模板
DIRS: [os.path.join(BASE_DIR,'templates')]
DATABASES 数据库
静态文件
STATIC_URL = '/static/' #静态文件的别名
STATICFILES_DIRS=[
os.path.join(BASE_DIR,'static')
]
django使用mysql数据库的流程
创建数据库
配置配置settings
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'bookmanager',#数据库名称
'HOST':'127.0.0.1',
'PORT':3306,
'USER':'root',
'PASSWORD':'admin',
}
}使用pymysql模块连接mysql数据库
写在与项目同名的文件夹的
__init__.py
中:import pymysql
pymysql.install_as_MySQLdb()在app下的models.py中写入model(Model):
from django import models
class User(models.Model):# 表名 app的名称_user
username = models.CharField(max_length=32)#varchar(32)执行数据库命令
python manage.py makemigrations #检测app下的model.py的变化 记录下变更记录
python manage.py migrate #迁移 将变更记录同步到数据库中
urls.py路径和函数对应关系
from django.conf.urls import url
from django.contrib import admin
from app01 import views urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^publisher_list/', views.publisher_list),
url(r'^publisher_add/', views.publisher_add),
url(r'^publisher_del/', views.publisher_del),
url(r'^publisher_edit/', views.publisher_edit),
]函数
from django.shortcuts import render,redirect,HttpResponse
def xxx(request):
request.method 请求方式 GET POST
request.GET #url上携带的参数 ?k1=v1&k2=v2 {} 推荐写法request.GET.get('k1')
request.POST #post请求提交数据 {} #处理业务逻辑 #返回响应
return 响应
#HttpResponse('字符串')
#render(request,'模板的文件名',{}) 返回一个HTML页面
#redirect('地址') 重定向form表单
form标签的属性 action地址 method=’post'
input标签要有name属性 有些标签要有value
要有一个button按钮 或者 type='submit'的input
ORM
对象关系映射
对应关系
类-->> 表
对象-->> 数据行
属性-->>字段
from django import models
class User(models.Model):# 表名 app的名称_user
username = models.CharField(max_length=32)#varchar(32)
django_day01的更多相关文章
- day18_雷神_django第一天
# django_day01 1.http 协议 超文本传输协议,HTTP有很多应用,但最著名的是用于web浏览器和web服务器之间的双工通信. 协议概述 HTTP是一个客户端终端(用户)和服务器端( ...
随机推荐
- C语言学习之我见-strncat()可调整的字符串拼接函数
strncat()函数,用于两个字符串的拼接. (1)函数原型 char * strncat(char * Dest,const char * Source,size_t _Count)` (2)头文 ...
- JS:Array
js有五种基本数据类型:string,number,boolean,null,undefined 一种引用类型,包括:1.Object类型:2.Function类型:3.Array类型:4.RegEx ...
- 分享自己平时使用的socket多客户端通信的代码技术点和软件使用
前言 说到linux下多进程通信,有好几种,之前也在喵哥的公众号回复过,这里再拿出来,重新写一遍:多进程通信有管道,而管道分为匿名和命名管道 ,后者比前者优势在于可以进行无亲缘进程通信:此外信号也是进 ...
- 全网求解,用Python处理一个基础题目
昨天在群里看见一个Python的问题,趁着今天有那么一点点时间,就想把这个题目分享出来,让大家一起解决.毕竟三个臭皮匠,赛过诸葛亮.原始数据如下: 1 origin_lst = [0, 0, 1, 2 ...
- GameFramework食用指南
1.框架简介 GF框架分两部分,GameFramework(GF)和UnityGameFramework(UGF): 通过接口的形式对Unity引擎进行了解耦: GF独立于Unity,具体业务逻辑实现 ...
- NC18979 毒瘤xor
NC18979 毒瘤xor 题目 题目描述 小a有 \(N\) 个数 \(a_1, a_2, ..., a_N\) ,给出 \(q\) 个询问,每次询问给出区间 \([L, R]\) ,现在请你找到一 ...
- 经典的损失函数:交叉熵和MSE
经典的损失函数: ①交叉熵(分类问题):判断一个输出向量和期望向量有多接近.交叉熵刻画了两个概率分布之间的距离,他是分类问题中使用比较广泛的一种损失函数.概率分布刻画了不同事件发生的概率. 熵的定义: ...
- C++指针和结构体基础知识
学习C++首先要回忆起C语言当中的指针和结构体知识,本文作者将通过一段代码来总结指针和结构体基础知识:指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址.就像其他变量或常量一样,您必须在使 ...
- SpringBoot接口 - API接口有哪些不安全的因素?如何对接口进行签名?
在以SpringBoot开发后台API接口时,会存在哪些接口不安全的因素呢?通常如何去解决的呢?本文主要介绍API接口有不安全的因素以及常见的保证接口安全的方式,重点实践如何对接口进行签名.@pdai ...
- Eslint 项目笔记
1.代码下一行不要验证报错 代码的上一行打上注释 <--eslint-disable-next-line-->