文章目录
一、创建项目
1.打开命令行终端
2.进入某个目录(项目放在哪里)
3.执行命令创建项目(已添加环境变量)
django-admin startproject 项目名称
Pycharm创建(需要专业版)
二、默认项目文件介绍
2.1 默认文件
三、APP的创建和说明
3.1 APP创建
项目
- app,用户管理【表结构,函数,HTML模板】
- **注意:**一般情况下,一个项目创建一个app即可。
在Pycharm的终端输入命令
python manage.py startapp [app名称]
四、启动运行django
4.1 app注册
- 确保app已注册【settings.py】【apps.py】
- 编写URL和视图函数对应关系【urls.py】【app->views.py】
- 编写视图函数(接收用户请求的)【views.py】
4.2 启动django项目
(1)命令行启动(项目路径下)
python manage.py runserver
4.3 templates模板
- 优先去项目根目录的templates中寻找
- 根据app的注册顺序,在每个app下的 templates目录中寻找
注意: templates目录一般写在app目录下
去app目录下寻找templates目录下寻找相关的html页面(根据app的注册顺序,逐一去他们的templates目录中找)
如果是在项目的根目录中创建的templates目录,则需要在settings.py添加:
'DIRS': [os.path.join(BASE_DIR, 'templates')],
需导入os包
'DIRS': [Path(BASE_DIR, 'templates')]
python 3.4版本之后,支持路径管理库pathlib,代替os用于路径的处理(未验证)
4.4 静态文件
在开发过程中一般将图片、CSS、js都当作静态文件处理。
- static目录
在app目录下创建static文件夹
- 引用静态文件
五、django模板语法
5.1 模板语法
本质上:在HTMl中写一些占位符,由数据对这些占位符进行替换和处理。
六、请求和响应
6.1 请求响应
- 在[urls.py]文件中添加something的url及对应的函数(可根据需求创建something.html文件)
- 在[views.py]文件编写相关的请求和响应:
from django.shortcuts import render, HttpResponse, redirect
def something(request):
# request是一个对象,封装了用户通过浏览器发送过来的所有数据
# 1.[请求] 获取请求方式GET/POST
print(request.method)
# 2.[请求] 在URL上传值 /something/?n1=12345$n2=6789
print(request.GET)
# 3.[请求] 在请求体中提交数据
print(request.POST)
# 响应:
# 4.[响应] HttpResponse("返回内容"),内容字符串内容返回给请求者
# return HttpResponse("返回内容")
# 5.[响应] 读取HTML的内容 + 渲染(替换) -> 字符串,返回给用户浏览器
# return render(request,'something.html',{"title":"来了"})
# 6.[响应] 让浏览器重定向到其他页面,重定向:是浏览器自己去寻找跳转的页面
return redirect("https://www.baidu.com")
6.2 案例:用户登录
- [urls.py]文件
# 案例:用户登录
path('login/', views.login),
- [views.py]文件
def login(request):
if request.method == 'GET':
return render(request, 'login.html')
# 如果已经满足GET请求了,已经return,后续代码就不执行了,则可以省去else
# else:
# 如果是POST请求,获取用户提交的数据
# print(request.POST)
username = request.POST.get("user")
password = request.POST.get("pwd")
# 进行校验
if username == "root" and password == "123":
# return HttpResponse("登录成功")
# 登录成功跳转到中国联通
return redirect("http://www.chinaunicom.com.cn/")
# 已经登录成功实现跳转了,已经return,后续代码将不执行,可省略else
# else:
# return HttpResponse("登录失败")
return render(request, 'login.html', {"error_msg": "用户名或密码错误"})
- app下的templates目录下的login.html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>用户登录</h1>
<form method="post" action="/login/">
<!-- {% csrf_token %} 解决403 CSRF 报错-->
{% csrf_token %}
<input type="text" name="user" placeholder="用户名">
<input type="password" name="pwd" placeholder="密码">
<input type="submit" value="提交">
<span style="color:red;">{{error_msg}}</span>
</form>
</body>
</html>
登录页面报错:
解决方法
验证:
登录成功,页面跳转
登录失败: