pip install django
“python环境路径\scripts\django-admin.exe” startproject django项目名
# 如果python环境路径配置了环境变量,可直接写
django-admin startproject django项目名
django_study_demo
│─ manage.py 【项目管理的脚本,不要修改,eg:启动、创建app、数据库管理等】
└─django_study_demo 【与项目同名的文件夹】
│─ asgi.py 【和wsgi.py一起,接收网络请求的】【不用修改】【Django接收异步的】
│─ settings.py 【项目的配置文件,eg:数据库连接信息、注册app等】【常操作】
│─ urls.py 【全部的URL和函数的对应关系】【常操作】
│─ wsgi.py 【和asgi.py一起,接收网络请求的】【不用修改】【Django接收同步的】
│─ __init__.py
python manage.py startapp app名
django_study_demo
│ manage.py
├─django_study_demo
│ asgi.py
│ settings.py
│ urls.py
│ wsgi.py
│ __init__.py
└─index 【app名命名的文件夹】
│ admin.py 【固定的不用动】django默认提供的后台管理,但实际开发不常用
│ apps.py 【固定的不用动】app启动相关
│ models.py 【☆很重要,对数据库进行操作】这里不用SQL写了,Django封装了ORM供调用
│ tests.py 【固定的不用动】用来单元功能测试的,个人小项目可以不用管
│ views.py 【☆很重要,撰写视图函数(得我们自己写的)】
│ __init__.py
└─migrations 【固定的不用动】数据库变更记录,会自动生成文件,我们不用动
__init__.py
找到urls.py中列表变量urlpatterns , 添加一行path(’ ’ , )
path('', include(("index.urls", 'index'), namespace='index')),
path(param1 , param2 , param3 )需要三个参数
param1 : URL
param2 : views.py的视图函数
param3 : 命名空间,方便后续模板层调用
修改相应app下的views.py
注意点:
1.django中的视图函数必须带request参数
2.视图函数必须return,一般返回的都是要传给前端的数据
def index(request):
return HttpResponse("hello, World")
命令行启动django项目:
python manage.py runserver 127.0.0.1:8008
如果还要创建新的页面,只需要两个步骤:
# 增加部分
# urls.py
path('user/add/', views.user_add),
path('user/delete/', views.user_del),
# views.py
def user_add(request):
return HttpResponse("用户添加")
def user_del(request):
return HttpResponse("用户删除")
def user_list(request):
# param1:request参数 , param2:html文件路径
return render(request,"user_list.html")
找到settings.py中TEMPLATES列表变量,修改"DIRS": [BASE_DIR/‘templates’]
#配置模板路径
TEMPLATES = [
{
"BACKEND": "django.template.backends.django.DjangoTemplates",
"DIRS": [BASE_DIR/'templates'],
"APP_DIRS": True,
"OPTIONS": {
"context_processors": [
"django.template.context_processors.debug",
"django.template.context_processors.request",
"django.contrib.auth.context_processors.auth",
"django.contrib.messages.context_processors.messages",
],
},
},
]
在django项目根目录创建templates文件夹
找到settings.py,配置静态文件
#配置静态文件
STATIC_URL = "/static/"
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'pstatic'),
)
在django项目根目录创建pstatic文件夹
在pstatic文件夹下创建img、css、js、plugins(插件:如Bootstrap:前端开发CSS框架)文件夹存放对应内容
注意点总结:
在settings.py 中配置媒体文件
#配置媒体文件
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
在django项目根目录中创建media文件夹
在目路由中配置media路由
# 配置媒体资源的路由信息
re_path('media/(?P.*)' , serve, {
'document_root': settings.MEDIA_ROOT},name='media')
运行django项目,可通过url访问媒体资源 测试
本质:在html中写一些占位符,然后由数据对这些占位符进行替换和处理
PS:上面提到的占位符 static 就是和 /static/ (settings.py中STATIC_URL 的值) 做了替换
对于列表数据,通过{ { 列表名.索引 }} 获取数据( 和python不同 , python是通过 [] )
语法:
{% for i in ... %}
...
{% endfor %}
对于列表数据:
对于字典数据:
{% if name == "XXX" %}
...
{% elif name == "XXX" %}
...
{% else %}
...
{% endif %}
和python一样,就是不用加 : , 结束必须带个 {% endif %},其他都一样
原理:
即请求和响应
request就是一个对象,封装了用户通过浏览器(爬虫等许多途径)发送过来的所有请求相关的数据,常用的有:
视图函数中return所返回的,就是我们要写的response,常用的有:
HttpResponse( ) : 返回内容字符串给请求者
render ( ) : 读取HTML,并渲染,最终以字符串的格式返回给用户浏览器
redirect( ) : 让浏览器重定向到其他页面,返回的是网址
Q: 重定向这个过程是怎么样的?
A: 浏览器提交请求给Django,Django收到请求并直接返回给浏览器重定向的网址,浏览器重新去新的网址那里提交请求,然后新的网址给浏览器返回响应数据
做一个简单的登录功能:
先简单做一个登录页面
设置路由、视图函数、以及映射关系,访问相应URL测试
设置form表单的提交地址是触发视图函数login( ) , 而且采用post请求
撰写login( ) 中的代码逻辑
def login(request):
if request.method == "GET":
return render(request,"login.html")
elif request.method == "POST":
post_data = request.POST
print(post_data)
return redirect("https://www.baidu.com")
PS : 浏览器一开始访问login.html(GET请求),视图函数login( )就render渲染login.html;填写完 form表单点击提交,再次访问就是POST请求了
测试功能
这段代码复刻到flask是没有问题的,在django中会报错,因为django自带了一个csrf,一个安全机制
解决方法:在form表单中,添加一行占位符:{% csrf_token %}
PS : django内部对其渲染时,将其渲染为一个隐藏输入框,并提交一个csrfmiddlewaretoken参数,值为一个列表,列表中有一个值:自动生成
ORM:封装了连接数据库的语句和SQL语句( 不用自己去写 ),而且增加了安全机制
新版本的django默认采用mysqlclient这个库
pip install mysqlclient
ORM可以帮我们做两件事:
django连接数据库只需要在 settings.py中 DATABASES字典 配置连接参数即可
#配置数据库
DATABASES = {
"default": {
"ENGINE": "django.db.backends.mysql",
"NAME": 'stock_allocation_system',
'USER': 'root',
'PASSWORD': '123456',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}