- 安装Django
在终端输入
conda activate py39
conda install django
1.1检验是否安装成功
python
>>> import django
>>> django.get_version()
'4.1.5'
2.创建项目
django项目中会有一些默认的文件和默认的文件夹
2.1终端
因为我是在环境py39下载的django,所以下载后/Users/qianying/miniconda3/envs/py39/bin/目录下会有django-admin
![](https://img-blog.csdnimg.cn/img_convert/277145b2db1dfca8eae3a2a15895b641.png)
现在进入想要创建项目所在目录,比如/Users/qianying/PycharmProjects/MyDjango,然后在终端输入
django-admin startproject 项目名称
![](https://img-blog.csdnimg.cn/img_convert/620a4538415395ccc97b8fe8688b55b9.png)
创建好后,/Users/qianying/PycharmProjects/MyDjango目录下就有mysite文件夹了。
2.2PyCharm(专业版)
点击【new project】
![](https://img-blog.csdnimg.cn/img_convert/edbce38203a7174b290e7a34b000deed.png)
选择Django项目,然后根据自己的情况开始配置。配置好后,点击【create】
![](https://img-blog.csdnimg.cn/img_convert/f239d546683a12cbf1b2af9891888546.png)
创建好后,有两个文件夹
![](https://img-blog.csdnimg.cn/img_convert/d178241e5cf3577f058ed02deba02d9c.png)
2.3两种方法对比
命令行版:常见的项目是标准的
PyCharm版:在标准的基础上添加了templates目录
两种方法的setting.py内容因为templayes目录的原因不一样
![](https://img-blog.csdnimg.cn/img_convert/0b89a0c3124c7e3bfe79b7b750f98bce.png)
![](https://img-blog.csdnimg.cn/img_convert/082a88a0ca3c8dfbfe3c5c2707a1ad03.png)
2.3默认项目文件介绍
├── mysite
│ ├── manage.py 【项目的管理,启动项目,创建app,数据库的管理】【不要动】
│ └── mysite
│ ├── __init__.py
│ ├── asgi.py 【异步,接收网络请求】【不要动】
│ ├── settings.py 【项目的配置文件】【常常操作】
│ ├── urls.py 【URL与函数的对应关系】【常常操作】
│ └── wsgi.py 【同步,接收网络请求】【不要动】
└── mysite2
├── manage.py
├── mysite2
│ ├── __init__.py
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── templates
3.APP
一个项目一般创建一个app
打开Pycharm的terminal,输入
python manage.py startapp app01
![](https://img-blog.csdnimg.cn/img_convert/1163dc1991cea2debe55777f77e51aeb.png)
app01目录下的文件介绍
app01
├── __init__.py
├── admin.py 【固定,不用动】django默认提供了admin后台管理。
├── apps.py 【固定,不用动】app启动类
├── migrations 【固定,不用动】数据库变更记录
│ └── __init__.py
├── models.py 【重要】对数据库操作
├── tests.py 【固定,不用动】单元测试
└── views.py 【重要】函数
4.快速上手Django
4.1注册app【settings.py】
打开app01文件夹下面的app.py文件,发现里面有App01Config类
![](https://img-blog.csdnimg.cn/img_convert/d68b96a41a08112b5914ba89df35688a.png)
打开settings.py文件找到如图所示位置,加入
![](https://img-blog.csdnimg.cn/img_convert/edeb0c8d9da4d99e0f8b1d2cc1282730.png)
'app01.apps.App01Config'
4.2编写URL和视图函数对应关系【urls.py】
![](https://img-blog.csdnimg.cn/img_convert/9c477b4bf550e52e020645cd7bc57e96.png)
from app01 import views
urlpatterns = [
# path('admin/', admin.site.urls),
# www.xxx/com/index -> views文件里找index函数
path('index/', views.index),
]
4.3编写视图函数【views.py】
from django.shortcuts import render, HttpResponse
# Create your views here.
def index(request):
return HttpResponse("欢迎使用~")
4.4启动Django项目
命令行启动
python manage.py runserver
pycharm启动
![](https://img-blog.csdnimg.cn/img_convert/fe0ae44d81a878e613d39f10804963e6.png)
运行后,发现和命令行是一样的
![](https://img-blog.csdnimg.cn/img_convert/b47637cd858c84e9bf2e7b13fafdde81.png)
没有这个工具栏的,点击【视图】-【外观】-【工具栏】
![](https://img-blog.csdnimg.cn/img_convert/82ee77e9c6b5b3fece2409cd439724f1.png)
浏览器进入http://127.0.0.1:8000/index,就会看见“欢迎使用~”这几个字了
4.5再写一个页面
只需要修改urls.py和views.py文件即可
![](https://img-blog.csdnimg.cn/img_convert/f43f1c25d0e24a1026d7b6c1e21a8d02.png)
4.6templates模板
在app01目录下创建templates目录,并在app01/templates/目录下创建html文件
修改一下views.py文件的函数
def user_list(request):
# 1.如果使用的是pycharm创建的项目,由于它根目录下有templates目录
# 它会首先到根目录下的templates目录中寻找html文件
# 2.否则,会去app01目录下的templates目录寻找user_list.html文件
# (会根据app的注册顺序,逐一去他们的templates目录中寻找)
return render(request, "user_list.html")
4.7静态文件
在开发过程中,一般将
图片
CSS
JS
当作静态文件处理。
在app01目录下创建static文件夹,然后再依次创建如下文件夹
![](https://img-blog.csdnimg.cn/img_convert/8fe76a98a3f2d1e24ba37f760b9062b2.png)
user_list.html
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="{% static 'plugins/bootstrap-3.4.1-dist/css/bootstrap-theme.css' %}">
</head>
<body>
<h1>用户列表</h1>
<img src="{% static 'img/1.jpeg' %}" style="width: 300px" alt="">
<div>
<input type="button" class="btn btn-success" value="新建用户">
</div>
<script src="{% static 'js/jquery-3.6.3.min.js' %}"></script>
<script src="{% static 'plugins/bootstrap-3.4.1-dist/js/bootstrap.js' %}"></script>
</body>
</html>
5.模板语法
本质上:在html文件中写一些占位符,由数据对这些占位符进行替换和处理。
templates目录下的html文件是含有模板语法的html
视图函数的render内部:
读取含有模板语法的html文件
内部进行渲染(模板语法执行并替换数据)
最终得到只包含html标签的字符串
将(渲染)替换完成的字符串返回给用户浏览器
def tpl(request):
name = 'qy'
roles = ['管理员', 'ceo', '保安']
user_info = {"name": "qyqy", "salary": 10000, "role": "ceo"}
data_list = [
{"name": "qyqy", "salary": 10000, "role": "ceo"},
{"name": "qyqy1", "salary": 10000, "role": "ceo"},
{"name": "qyqy2", "salary": 10000, "role": "ceo"},
{"name": "qyqy3", "salary": 10000, "role": "ceo"}
]
return render(request, "tpl.html", {'n1': name, "n2": roles, "n3": user_info, "n4": data_list})
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>模板语言学习</h1>
<div>{{ n1 }}</div>
<div>{{ n2 }}</div>
<div>{{ n2.0 }}</div>
<div>{{ n2.1 }}</div>
<div>{{ n2.2 }}</div>
{#for语句#}
<div>
{% for item in n2 %}
<span>{{ item }}</span>
{% endfor %}
</div>
{#分隔线#}
<hr/>
{#字典#}
{{ n3 }}
{{ n3.name }}
{{ n3.salary }}
{{ n3.role }}
<ul>
{#items:键值对,values:值,keys:键#}
{% for k, v in n3.items %}
<li>{{ k }} = {{ v }}</li>
{% endfor %}
</ul>
<ul>
{% for v in n3.values %}
<li>{{ v }}</li>
{% endfor %}
</ul>
<ul>
{% for k in n3.keys %}
<li>{{ k }}</li>
{% endfor %}
</ul>
<hr/>
{#列表嵌套字典#}
{{ n4.1 }}
{{ n4.1.name }}
{{ n4.1.salary }}
{% for item in n4 %}
<div>{{ item.name }} {{ item.salary }}</div>
{% endfor %}
<hr/>
{#条件语句#}
{% if n1 == 'qy' %}
<h1>hahaha</h1>
{% else %}
<h1>hehehe</h1>
{% endif %}
</body>
</html>
案例:伪新闻中心
veiws.py
def news(request):
# 1.定义一些新闻(字典或者列表) 或 去数据库 或 网络请求去获取联通新闻
# 第三方模块requests
import requests
import json
# 设置url
url = "http://www.chinaunicom.com.cn/api/article/NewsByIndex/2/2023/01/news"
# 设置UA伪装
headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.2 Safari/605.1.15"
}
res = requests.get(url=url, headers=headers)
data_list = res.json()
print(data_list)
return render(request, "news.html", {"news_list": data_list})
news.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>新闻中心</h1>
<ul>
{% for item in news_list %}
<li>标题:{{ item.news_title }} 时间:{{ item.post_time }}</li>
{% endfor %}
</ul>
</body>
</html>