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是一个客户端终端(用户)和服务器端( ...
随机推荐
- php判断客户端浏览器类型
/** * 判断浏览器名称和版本 */ function get_user_browser() { if (empty($_SERVER['HTTP_USER_AGENT'])) { return ' ...
- 如何正确理解古典概率中的条件概率 《考研概率论学习之我见》 -by zobol
"B事件发生的条件下,A事件发生的概率"? "在A集合内有多少B的样本点"? "在B约束条件下,A发生的概率变化为?" "B事件中 ...
- WPF开发随笔收录-获取软件当前目录的坑
一.唠唠叨叨 软件开发过程中,经常需要使用到获取exe当前目录这个功能,前同事在实现这个需求时使用的是Directory.GetCurrentDirectory()这个方法,但再最近的测试中,突然发现 ...
- Linux 文件的打包压缩
压缩和解压 压缩:为了节约磁盘空间. gzip --- .gz bzip2 --- .bz2 xz --- .xz compress --- .z 压缩比例:xz > bzip2 > gz ...
- ajax传递参数与controller接收参数映射关系
将ajax的参数传递至后台controller时,data 中的参数名要与controller中的形参保持一致. 前端ajax代码: 1 $.ajax({ 2 url:"/doLogin&q ...
- .NET GC工作流程
前言 在上文[如何获取GC的STW时间]一文中,我们聊到了如何通过监听GC发出的诊断事件来计算STW时间.里面只简单的介绍了几种GC事件和它的流程. 群里就有小伙伴在问,那么GC事件是什么时候产生的? ...
- 如何用空气质量查询API接口进行快速开发
空气质量的好坏反映了空气污染程度,它是依据空气中污染物浓度的高低来判断的.空气污染是一个复杂的现象,在特定时间和地点空气污染物浓度受到许多因素影响.来自固定和流动污染物的人为污染物排放大小是影响空 ...
- NewApiDay03_File类
File类创建一个新文件 File类的每一个实例可以表示硬盘(文件系统)中的一个文件或目录(实际上表示的是一个抽象路径) 使用File可以做到: 1:访问其表示的文件或目录的属性信息,例如:名字,大小 ...
- ajax01_基础知识
ajax请求 ajax概述 组成:asynchronous + javascript + xml 特点: 可发送异步请求(这也是与传统请求方式的区别) 用javascript语言编写代码 前后端数据交 ...
- html的基础01
1.什么是网页 2.常用的浏览器有哪些 3.web标准是什么 1.什么是网页 2.常用的浏览器 360.百度那些都是国产浏览器,内核一样,以上六个都是国际浏览器,不同厂商生产(但IE和Edge都是 ...