(1)产生背景:
(1)在传统的web访问需要加上路由后缀 通过后缀进行相应的视图函数处理
(2)如果有大量的后缀就需要在路由表里添加大量的后缀 显然不合理
(2)解决办法:
(1)将文件进行配置暴露给外界能够访问服务器静态文件夹下面所有的资源
例如:
STATIC_URL = ‘/static/‘ # 接口前缀
# 暴露给外部的能够访问服务器内部所有资源
STATICFILES_DIRS = [
os.path.join(BASE_DIR,‘static‘)
]
PS:外部会依次查找文件路径下所有资源 如果访问到则结束 访问失败则返回404
【1】客户端数据请求
(1)作用:根据不同的请求回应不同的处理结果
例如:
def login(request): ‘‘‘ 代码1 代码2 代码3 代码4 代码5 ‘‘‘ return render(request, ‘login.html‘)
PS:
(1)假设此时我只是想访问login.html这个页面
(2)然而内部走了一些不需要的代码 降低代码执行效率
(2)解决办法:根据不同的请求方式进行不同的代码处理
例如:
def login(request):
print(request.method) # 获取请求方式 默认GET请求
if request.method == ‘GET‘:
return render(request, ‘login.html‘) # 如果GET请求则返回页面
else:
return HttpResponse(‘hello world!‘) # 如果POST请求返回相应结果
【2】服务端数据获取
(1)前端输入值只有一个数据的时候
例如:
def login(request): if request.method == ‘POST‘: print(request.POST) # <QueryDict: {‘username‘: [‘admin‘], ‘password‘: [‘123‘]}> print(request.POST.get(‘username‘)) # admin print(request.POST.get(‘password‘)) # 123 return HttpResponse(‘hello world!‘) return render(request,‘login.html‘)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script> <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.min.css"> <script src="/static/bootstrap/js/bootstrap.min.js"></script> </head> <body> <div class="container"> <div class="row"> <form action="" method="post"> <h3>登陆界面</h3> <p>username: <label for="d1"> <input type="text" id="d1" class="form-control" name="username"> </label> </p> <p>password: <label for="d2"> <input type="password" id="d2" class="form-control" name="password"> </label> </p> <input type="submit" class="btn btn-primary"> </form> </div> </div> </body> </html>
PS:
(1)上述可以将获取的值看成字典
(2)可以通过字典的方式获取值 但是推荐使用.get进行值的获取
(3)为什么获取的不是列表而是字符串 请慢慢看
(2)前端输入值有多个数据的时候
例如:
def login(request): if request.method == ‘POST‘: print(request.POST) # <QueryDict: {‘username‘: [‘admin‘, ‘user‘], ‘password‘: [‘123‘]}> print(request.POST.get(‘username‘)) # user print(request.POST.get(‘password‘)) # 123 return HttpResponse(‘hello world!‘) return render(request,‘login.html‘)
PS:
(1)当有多个值的时候 其会获取最后一个值
(3)服务端一次性获取多个值
例如:
def login(request): if request.method == ‘POST‘: print(request.POST) # <QueryDict: {‘username‘: [‘admin‘, ‘user‘], ‘password‘: [‘123‘]}> print(request.POST.getlist(‘username‘)) # admin user print(request.POST.get(‘password‘)) # 123 return HttpResponse(‘hello world!‘) return render(request,‘login.html‘)
三:Django连接数据库
作用:获取数据库值与前端输入数据做校验
例如:
def login(request): username = request.POST.get(‘username‘) pwd = request.POST.get(‘password‘) if request.method == ‘POST‘: conn = pymysql.connect( host=‘127.0.0.1‘, port=3306, user=‘root‘, password=‘123‘, database=‘day51‘, charset=‘utf8‘, autocommit=True, ) cursor = conn.cursor(pymysql.cursors.DictCursor) sql = ‘select * from user_info where name=%s and password=%s‘ cursor.execute(sql, (username, pwd)) res = cursor.fetchall() if res: return HttpResponse(‘登陆成功‘) return render(request, ‘login.html‘)
=
原文:https://www.cnblogs.com/SR-Program/p/11523965.html