1.小白必会三板斧
# 启动django项目之后 如何添加更多的功能
回想自己编写的web框架 如果要添加功能 就去urls.py和views.py
# django自带重启功能
当识别到项目中代码有变化之后 隔段时间会自动重启 但是有时候较慢
# 与浏览器打交道的视图函数都应该有返回值 常见的就是下列三个
HttpResponse
主要用于返回字符串类型的数据
需要在urls里面写函path('index/', views.index),
然后在app01的views里面添加index函数的功能
render
主要用于返回html文件 并且支持模板语法(django自己写的)
def index(request):
#return HttpResponse('你好')
return render(request,'01.html')
return render(request,'01.html',{'name':'aaa',"password":111})
redirect
主要用于重定向 括号内可以写其他网站的全称 也可以自己网站的后缀
def index(request):
return redirect('http://www.baidu.com')
def index(request):
return redirect('/abc')
def adc(request):
return HttpResponse("年后带哦")
就访问到了adc这个后缀
# 【四】django 自带了重启功能
# ctrl + s 保存 保存以后会自动发生重启
# 对于前端页面来说 前端室友浏览器负责渲染的 所以 修改前端页面的时候不需要重启 Django 直接刷新即可
2.Django静态文件 static
#开设接口返回登录界面
#登录接口使用bootstrap还需要自己写css和js
#页面需要获取前端用户的数据并且传输个后端
需要form表单
action参数:控制数据的地址
method参数:控制请求提交的方式
#访问页面 样式不存在
#写完成不会经常被修改 和html页面相关的文件
css js 图片 第三方
上述文件就是静态文件 在django里面单独开一个文件夹存储 static文件夹
在这个文件夹还可以根据功能不同来创建其他的
#因为我们没有开设静态资源的访问接口
理论上去url路由曾开设接口资源 但是由于静态文件使用频率高 只要是web项目都需要 所以填写固定配置的可开设资源接口
# [3]没有配置静态文件目录
# STATICFILES_DIRS = [
# os.path.join(BASE_DIR, 'static')
# ]
# 有了静态文件目录配置后你就发现能够使用了
# 配置文件中的两点疑惑
STATIC_URL = '/static/' # 作用是什么
STATICFILES_DIRS = [] # 为什么是列表(用来存储多个元素的)
"""
以该地址为例:/static/bootstrap-3.3.7-dist/css/bootstrap.min.css
/static/是接口前缀 表示具备访问静态文件资源的权限
具备了权限之后会拿着接口前缀后面的文件路径去列表中每个文件夹中查找
bootstrap-3.3.7-dist/css/bootstrap.min.css
找到一个就结束
比如 static和static1里面都有a.txt 那么只会拿到static中的
"""
# .接口前缀动态绑定
如果templates中有很多html文件并且都需要引入静态资源
现在把接口前缀修改了 那么会造成什么结果???>>>:页面无法加载资源
{% load static %}
<link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.min.css' %}">
3.request对象方法
"""
提交post请求 默认会报403
前期不需要过多考虑 直接去配置文件中注释一行即可
MIDDLEWARE = [
# 'django.middleware.csrf.CsrfViewMiddleware',
]
"""
1.get请求和post请求都会触发同一个视图函数login的运行
如何针对不同的请求执行不同的代码
get请求返回一个登录页面
post请求获取用户数据并校验
2.获取当前请求方式
def login(request):
print(request.method)
return render(request,'02.html')
request.method ""
request.method 返回的是纯大写的请求方法字符串
"""由于get请求更加常见 post请求次之 所以还可以按照下列方式简写"""
if request.method == 'POST':
return HttpResponse('默默的奋斗才是王道 有了成就才有发言权')
"""默认让视图函数处理get请求"""
return render(request, 'login.html')
3.获取post请求提交的普通数据
request.POST 结果是一个QueryDict 可以看成字典处理
request.POST.get('username')
request.POST.getlist('hobby')
"""
get方法会拿到值列表中最后一个元素 而不是整个列表
getlist方法会直接拿到整个值列表
"""
"""
def login(request):
print(request.method)
request.POST
request.POST.get('username')
print( request.POST)
print(request.POST.get('username'))
if request.method=='POST':
return render(request,'01.html')
return render(request,'02.html')
"""
4.如何获取url后面携带的数据
request.GET 结果是一个QueryDict 可以看成字典处理
request.GET.get('info')
request.GET.getlist('cityList')
"""
特征与上述request.POST一致 使用场景也很多
https://www.lagou.com/wn/jobs?kd=python&isSchoolJob=1&city=%E4%B8%8A%E6%B5%B7&pn=1
"""
4.djiango orm简介
#特点
能够让不会写sql的python程序员使用python语法就可以直接操作MySQL
好处:提升了开发效率
坏处:封装了sql语句 有时候效率不高 还需要人为编写sql调优
#概念
表 类
一行行数据 类产生的一个个对象
数据字段 对象的一个个属性
#需要去model.py 编写代码
1.编写类代码
class Users(models.Model):
uid = models.AutoField(primary_key=True) # 等价于uid int primary key auto_increment
name = models.CharField(max_length=32) # 等价于name varchar(32)
pwd = models.IntegerField() # 等价于pwd int
2.执行数据库迁移命令
python3 manage.py makemigrations # 记录操作
python3 manage.py migrate # 将操作迁移到数据库
"""
首次执行迁移命令 django还会自动创建一些默认需要使用到的表
"""
3.表名的特征
Users app01_users
由于django支持多个应用 为了区分不同应用下可能会出现相同的表名
所以自动加上了应用的前缀 因为同一个应用下不可能出现相同的表名(只要你是个正常的程序员都不会犯这样的错误)
4.扩展
1.表的主键可以不写 orm会自动帮你写一个名为id的主键
2.每次修改了跟数据库相关的python代码 都需要重新执行迁移命令
针对两个迁移命令 可以采用pycharm提示功能编写
tools
run manage.py task