-
django处理浏览器的请求流程:
-
请求发送到wsgi wsgi封装了请求的相关数据(request)
-
django去匹配路径 根据路径判断要执行哪个函数
-
执行函数 函数执行具体的业务逻辑
-
函数返回响应 djgango返回 按照HTTP协议响应的格式进行返回
-
-
发请求的途径
-
在浏览器地址栏输入地址 回车 发出get请求
-
a标签 发出get请求
-
-
-
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 POST -
ORM
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)
-
-