python+django(一)基本入门
于网页相关基础概念的解释:https://blog.csdn.net/kang_01/article/details/110151002
django基础入门参考链接:https://zhuanlan.zhihu.com/p/24831528
需求是:一个文件,放到网上,给用户分配账号后,用户可以登录下载文件。
一、安装Django(windows系统)
安装:
pip install Django
测试装好了:
import django
print(django.get_version())
进到工作文件夹(自己建的目录,我的是web-test):
django-admin startproject mysite001
看到生成文件夹‘web-test\mysite001’,并且里面包含了一些初始化的文件。
一个网站可以有很多的模块,以百度为例,有网页,有地图,有贴吧,每个模块的功能都相对独立,可以将它们看成一个一个的独立app,共同组成了mysite001这个项目。因此我们需要创建每个app的文件夹。进到mysite001文件夹中,运行下面命令,会多一个app001的文件夹。
python manage.py startapp app001
app001,存放指定app的文件夹
mysite001,管理整个web的文件夹,web内容目前包含了一个app001
manage.py,是django-admin的一个小包装,调用manage.py可以非常方便得执行诸如,新建APP,启动服务器等命令
二、准备工作
正式编写网站之前,还需要为网站结构做一些准备。
(1)新建两个文件夹:static 和 templates:
static:用于存放html<head>引入的css类,js类等文件,以及图片,声音等静态文件。大部分网页共用的静态文件可以直接存放在static目录下,如app001特别使用的文件,建议在static下新建文件夹app001单独存放。也可以下设image,sound等文件夹,专门管理某一类别的文件。方便管理!!
templates:用于存放html类文件,同样的为每个app新建一个文件夹。
(2)下面需要告诉Django各个组件之间的联系。
① “\mysite001\mysite001\settings.py”:
INSTALLED_APPS = [
'app001.apps.App001Config', # 增加app声明
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
新增代码段通俗解释,告诉Django,涉及app001的指令,去到app001文件夹寻找。注意App001Config,开头字母大写。(app001文件夹中已经生成了一个apps.py文件,并定义了一个类App001Config。以上这些Django都帮我们做好了,无需重复劳动)
② 补充templates关联设置:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS':[os.path.join(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文件夹位置。
③ 修改系统时间为北京(上海)时间
TIME_ZONE = 'Asia/Shanghai'
④ 补充static关联设置
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
]# 新增代码
新增代码段解释,告诉Django,涉及{% load static %}命令,去static文件夹寻找。
⑤ 由于本章节还涉及不到数据库的使用内容,这里我们增加一段代码,将用户信息保存在缓存。
SESSION_ENGINE ='django.contrib.sessions.backends.cache'
SESSION_CACHE_ALIAS= 'default'
(3)分配好各个文件夹的路径,下面我们需要对网站的地址(url)进行统一调度。
打开“mysite001\mysite001\urls.py”:
from django.urls import path,include,re_path # 增加 include
from django.contrib import admin
urlpatterns = [
re_path(r'^app001',include('app001.urls')), # 增加对应关系
path(r'^admin/', admin.site.urls),
]
以上新增的代码包含了一段正则表达式 r'^app001',符号 ^ 表示头部匹配。整段语句表示,若网站地址为"http://XXXXX/app001……" ,则该地址分配到"app001/urls.py"文件来处理。
此时”app001/urls.py”目录下还没有这个文件,我们需要新建这个文件,来处理后续。
注意:网上教程看到的是用from django.conf.urls import url,但是在Django 4版本之后,就没有url了,改为了re_path。所以用from django.urls import re_path(上面和下面修改的urls.py中都是)
三、第一个简单的App
(1)(接上文)新建”app001/urls.py”:
from django.urls import re_path
from . import views
from django.conf import settings
from django.conf.urls.static import static
urlpatterns =[
re_path(r'^$',views.index1,name='index1'), # 建立地址和视图的关联
]+static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
这里,又看到了一个正则表达式 r'^$' ,分配到app001的url地址,再和 r'^$' 匹配。符号 $ 表示尾部匹配,再加上符号 ^ (头部匹配),^$表示匹配首页。
这里我们建立了一个url和view的关系,即在首页地址“http://XXX/app001”页面上显示视图index1。
最后为了方便管理,将这个首页的url命名为index1。这样,在html引用地址时,可以避免“http://xxx……”的硬编码,而是采用{% url ‘index1’ %}的形式,灵活得管理。
(2)在”app001/urls.py”文件中建立了首页与index1视图的关系,但index1视图还未定义。打开“app001/views.py”:
from django.shortcuts import render
# Create your views here.
def index1(request): #定义视图index1
ans={} #创建一个字典
ans['head']='hello world' # 赋值
return render(request,'app001/firstpage.html',ans) # 输出字典
上面代码的含义就是定义一个index1,向'templates/app001/firstpage.html'输出字典ans的值。
新建 'templates/app001/firstpage.html',编写一个最简单的html,
{{head}}
{{}}是Django自带的服务器语言,表示提取双括号内变量的值。这里我们是提取ans['head']的值。
五、运行服务器
现在让我们将本机作为服务器,看看我们的网站吧
python manage.py runserver
我们的服务器地址在“http://127.0.0.1:8000/”
在浏览器地址栏输入地址“http://127.0.0.1:8000/app001”
总结一下Django各个模块的作用:
urls 负责 分配网页地址给views
views负责 传递变量给templates
templates收到变量值,展示给访客
删除app
1、删除app文件夹。
2、删除setting.py 文件中的注册的应用。
3、删除urls.py 文件的路径。