参考视频: https://www.bilibili.com/video/av78843746?t=10
讲解的很简洁!
概述:主要参考上面视频进行学习,此处是部分代码笔记. 展示github 用户信息.
工具:
- vscode;
- git bash;
- chrome;
- Django3.0
- boostrap4.0
目录结构如下:
上传到我的github :
echo "# Django_demo" >> README.md
git init
git add README.md
git add .
git commit -m "first commit"
git remote add origin https://github.com/caokai001/Django_demo.git
git push -u origin master
Django 架构
1.成果展示
无法加载gif,点击查看gif 效果
2.python 安装
### 新建文件夹
mkdir 2020-1
cd 2020-1
### 检查python版本(高版本的Django 不支持python2.x)
16926@DESKTOP-NC9OOR3 MINGW64 ~/Desktop/2020-1
$ python -V
Python 3.6.4 :: Anaconda, Inc.
3.虚拟环境安装使用
### 查询base环境中存在哪些安装包(为了环境隔离,最好建立新的py环境)
$ pip freeze
... 好多包
### pip 加速下载
$ pip install -i https://pypi.douban.com/simple/ virtualenv
Collecting virtualenv
Downloading https://files.pythonhosted.org/packages/05/f1/2e07e8ca50e047b9cc9ad56cf4291f4e041fa73207d000a095fe478abf84/virtualenv-16.7.9-py2.py3-none-any.whl (3.4MB)
### 建立虚拟环境
$ virtualenv.exe .
Using base prefix 'c:\\users\\16926\\anaconda3'
New python executable in C:\Users\16926\Desktop\2020-1\Scripts\python.exe
Installing setuptools, pip, wheel...
done.
### 激活虚拟环境
16926@DESKTOP-NC9OOR3 MINGW64 ~/Desktop/2020-1
$ source ./Scripts/activate
### 检查虚拟环境中包
(2020-1)
16926@DESKTOP-NC9OOR3 MINGW64 ~/Desktop/2020-1
$ pip freeze
(空)
4.安装Django
### 安装最新版django
(2020-1)
16926@DESKTOP-NC9OOR3 MINGW64 ~/Desktop/2020-1
$ pip install -i https://pypi.douban.com/simple/ django
Installing collected packages: asgiref, sqlparse, pytz, django
Successfully installed asgiref-3.2.3 django-3.0.2 pytz-2019.3 sqlparse-0.3.0
### 虚拟环境包
(2020-1)
16926@DESKTOP-NC9OOR3 MINGW64 ~/Desktop/2020-1
$ pip freeze
asgiref==3.2.3
Django==3.0.2
pytz==2019.3
sqlparse==0.3.0
5.启动Django 小程序
### 默认环境及其路径,下面将省略
(2020-1)
16926@DESKTOP-NC9OOR3 MINGW64 ~/Desktop/2020-1
### 建立mysite 项目
$ django-admin.exe startproject mysite
### 进入mysite项目
$ cd mysite/
### 运行实例app
(2020-1)
16926@DESKTOP-NC9OOR3 MINGW64 ~/Desktop/2020-1/mysite
$ python manage.py runserver
进入浏览器: http://127.0.0.1:8000/
进入浏览器: http://127.0.0.1:8000/admin
6.配置路由urls
### 创建一个app (misterwu)
(2020-1)
16926@DESKTOP-NC9OOR3 MINGW64 ~/Desktop/2020-1/mysite
$ python manage.py startapp misterwu
### 修改mysite目录下setting.py内容
# tips:将创建的app 与project 关联,告诉Django 这是一个app
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
"misterwu",
]
### 修改mysite目录下urls.py ,解析网址和视图函数关系
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('',include('misterwu.urls')), # 需要新建misterwu目录下urls.py文件
]
### 新建misterwu目录下urls.py文件
from django.urls import path
urlpatterns = [
# 先省略
]
7.展示出html 页面
### 新建misterwu目录下urls.py文件
from django.urls import path
from . import views
urlpatterns = [
path('',views.home,name="home") # 需要新建views.py 下home 方法
]
### 新建misterwu目录下views.py文件
from django.shortcuts import render
# Create your views here.
def home(request):
return render(request,"home.html",{}) # 需要新建misterwu/templates目录下home.html文件
### 新建misterwu/templates目录下home.html文件
Hello world
进入浏览器: http://127.0.0.1:8000/
梳理一下思路:
1.输入127.0.0.1:8000/ --> 请求mysite urls.py
路由函数
path('',include('misterwu.urls'))
2.misterwu.urls 路由函数,配置视图函数 views.py
下home 方法
path('',views.home,name="home")
3.home方法,返回home.html
网页文件
def home(request):
return render(request,"home.html",{}) # 需要新建misterwu目录下home.html文件
4.home.html 内容如下,返回Hello world
Hello world
8.创建公共html 模板
Boostrap4
8.1 . 修改base.html 文件,来源于bs4 初学者入门代码。(添加了block
代码块)
Hello, world!
{% block content %}
{% endblock %}
8.2 修改home.html
用extends 加载base.html模板.有点类似继承关系.
{% extends 'base.html' %}
{% block content %}
Hello world
测试是否可以看到我!
{% endblock %}
9.添加导航信息
1.
...: 将信息居中显示
对base.html 进行修改,添加导航条
米斯特吴
{% block content %}
{% endblock %}
效果如下:
10.Github API 接口介绍
github API : https://api.github.com/
jsonplaceholder 网站: http://jsonplaceholder.typicode.com/
11.接口请求和解析
下载 requests 模块
(2020-1)
16926@DESKTOP-NC9OOR3 MINGW64 ~/Desktop/2020-1
$ pip install -i https://pypi.douban.com/simple/ requests
修改misterwu目录下,views.py 请求函数
from django.shortcuts import render
# Create your views here.
def home(request):
import requests
import json
api_request = requests.get("http://api.github.com/users?since=0")
api = json.loads(api_request.content)
return render(request, "home.html",
{"api": api}) # 需要新建misterwu目录下home.html文件
修改home.html ,添加api 变量
{% extends 'base.html' %}
{% block content %}
Hello world
测试是否可以看到我!
{% endblock %}
运行结果如下: python manage.py runserver
12.更好的展示数据信息
bs4 card 渲染card 形式
修改home.html
: 对于HTML进行循环输出card 样式.
{% block content %}
Hello world
测试是否可以看到我!
{% for x in api %}
{% endfor %}
{{api}}
{% endblock %}
效果如下:
13.搜索页面跳转
1.添加user/ 路由, 实现路由访问 http://localhost:8000/user/
-
修改MYSITE/mysite目录 下urls.py
from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('', include('misterwu.urls')), ]
- 修改misterwu目录下urls.py
from django.urls import path
from . import views
urlpatterns = [path('', views.home, name="home"),
path('user/', views.user, name="user")]
- 修改misterwu目录下view.py
def user(request):
return render(request, 'user.html', {})
-
musterwu下template目录下,新建user.html
{% extends 'base.html' %} {% block content %}
Hello world!
测试是否可以看到我!
{% endblock %} 测试结果:
2.添加跳转功能
search
,请求单个人的信息
修改misterwu/template 目录下base from 表单,链接到user/路由函数上
**1.method="POST" action="{% url 'user' %}" **
**2.{{% csrf_token % }} **
3.将input 命名为user : name= "user"
测试结果:
正常跳转到 user/
路由解析
3.点击search ,捕获输入内容
修改misterwu 目录下views.py : 捕获表单input,并且传递给user.html
def user(request):
user = request.POST["user"]
return render(request, 'user.html', {'user': user})
修改misterwu/templates 目录下,user.html
,接受user 参数
{% extends 'base.html' %}
{% block content %}
Hello {{user}}!
测试是否可以看到我!
{% endblock %}
测试结果:(右上角输入内容:如kcao
,点击search
, 网页展示相应内容)
14. 获取搜索数据:通过search
不同的名字,请求获得不同的信息
思路:
-
完善
米斯特吴
和查询
两个链接:米斯特吴链接到home 路由,查询 链接到 user 路由。ps:搜索也是链接到user路由。需要辨别两种请求
- 修改base.html . 对米斯特吴,link 两个link,添加链接
米斯特吴
查询
- 对views.py 进行修改
from django.shortcuts import render
# Create your views here.
def home(request):
import requests
import json
api_request = requests.get("http://api.github.com/users?since=0")
api = json.loads(api_request.content)
return render(request, "home.html",
{"api": api}) # 需要新建misterwu目录下home.html文件
def user(request):
if request.method == "POST":
user = request.POST['user']
return render(request, 'user.html', {'user': user})
else:
notfound = "请在输入框中输入您要查询的用户..."
return render(request, 'user.html', {'notfound': notfound})
3.对 user.html 进行修改。(ps: Django 自带的模板语言,类似python 语法)
{% extends 'base.html' %}
{% block content %}
{% if notfound %}
{{notfound}}
{% else %}
Hello {{user}}!
{%endif%}
{% endblock %}
对两种请求方式进行判断,展示不同的信息
进一步完善search 功能,(通过表单提交,点击search 返回的结果)
- misterwu/templates 目录下base 修改如下:
{% extends 'base.html' %}
{% block content %}
{% if notfound %}
{{notfound}}
{% else %}
{{username.login}}
location: {{username.location}}的github
public_repos: {{username.public_repos}}的github
public_gists: {{username.public_gists}}的github
followers: {{username.followers}}的github
following: {{username.following}}的github
created_at: {{username.created_at}}的github
updated_at: {{username.updated_at}}的github
Hello {{user}}!
{%endif%}
{% endblock %}
运行效果:
参考资料:
- 刘江的博客Django 教程
- Heroku 部署Django
- Heroku 部署教程2