框架怎么学?
如果要学好框架,最好还是从基础入手;
否则总是有不解的问题;
事实上我们通过python提供的soket、wsgi两个库完全可以构造自己的web框架;
当我们实现了自己的web框架之后,很容易就会明白别的框架为什么这么构造了;
建议先学习哔站的这个视频:
https://www.bilibili.com/video/av89018506?p=1
然后再入手DjangGo;
参考文档:
https://docs.djangoproject.com/zh-hans/2.1/topics/
用Pycharm创建一个Django工程
创建完成后,目录结构暂时不要动;
这个结构作为主项目;
如果要运行程序在终端输入
python manage.py runserver
即可
创建子项目
python manage.py startapp test_1
该代码创建了一个名为test_1的子项目;
这相当于项目差分;
不至于与主项目混淆;
创建好后的目录结构

修改配置
来到主项目下的settings.py文件下
在INSTALLED_APPS里注册新创建的项目

创建模板
-
在子目录下创建模板目录
image.png
- 创建模板文件
<h1>hello world</h1>
创建视图函数
- 在子目录下的views.py中写入
from django.shortcuts import render
# Create your views here.
def index(request):
return render(request, 'index.html', {})
{}是用于传参的,目前为空
注册url
- 在test_1项目下新建一个urls.py文件
写入代码
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
注意“.”指的是当前目录
这里我们导入了views.py下的index函数;
指定name="index",这个什么意思?
它不是路由路径,因为输入时会报错的,见下图,

因为JIANJIA2模板可以通过路由对应的函数获取参数,如果路由名字改变,则所有模板中的变量都需要修改,为了避免麻烦,所以从这里起一个固定的名字,这样路由怎么办,都不会影响到模板了,当然这么说很抽象,以后遇到时再解决;
- 打开主项目的urls.py
导入include
from django.urls import path, include
- 注册test_1项目的url
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('test_1.urls')),
]
打开网页

创建通用模板
- 在子项目下的templates下创建base.html
写入
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.4.1/dist/css/bootstrap.min.css"
integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
<title>Hello, world!</title>
</head>
<body>
{% block content %}
{% endblock %}
<!-- Optional JavaScript -->
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="https://cdn.jsdelivr.net/npm/jquery@3.4.1/dist/jquery.slim.min.js"
integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n"
crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"
integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo"
crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.4.1/dist/js/bootstrap.min.js"
integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6"
crossorigin="anonymous"></script>
</body>
</html>
{% block content %}
{% endblock %}
是Jia2代码块
- 在index.html中引用base.html模板
{% extends 'base.html' %}
{% block content %}
<h1>哈喽,世界</h1>
{% endblock %}

修改base.html样式

网友评论