项目结构:
B2`WYU6F)_`L3`~6}(SDV%6.png
功能集合
-
主页显示用户的照片,姓名,github链接,点击访问,跳转到用户的github主页。
GHR(8LN~BJMN~_O9SQ3SKKO.png -
输入github的用户名,点击搜索按钮。页面立即跳转到该用户的详情页。展示该用户的姓名,公司,博客地址,点击博客地址跳转到用户个人博客。
4$W@H3W22C~PPY@R7I}[email protected] -
主页点击查询按钮,页面跳转到用户列表页,展示所有搜索过的用户信息。
@{@1US(41`5AQ2_)```1)`W.png
Django是一个python开源框架。
(M32AHUT`R8[D`913N(WPS1.png
MVC 模型
MVC 模式(Model–view–controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。
MVC 以一种插件式的、松耦合的方式连接在一起。
- 模型(M)- 编写程序应有的功能,负责业务对象与数据库的映射(ORM)。
- 视图(V)- 图形界面,负责与用户的交互(页面)。
- 控制器(C)- 负责转发请求,对请求进行处理。
但是在Django中,是MTV模型,本质和MVC一致。只是名称不一致。
图解
5`]W3EU`}9IU1L52`LLGB~R.png
用户通过浏览器向我们的服务器发起一个请求(request),这个请求会去访问视图函数:
a.如果不涉及到数据调用,那么这个时候视图函数直接返回一个模板也就是一个网页给用户。
b.如果涉及到数据调用,那么视图函数调用模型,模型去数据库查找数据,然后逐级返回。
视图函数把返回的数据填充到模板中空格中,最后返回网页给用户。
开发环境
Win 10(64位)
Python 3.8.0
Django 3.1.7
编写Model.py
Django中通过模型(Model)映射到数据库,处理与数据相关的事务。
keithyang/models.py,输入如下代码:
python
from __future__ import unicode_literals
from django.db import models
# Create your models here.
查询列表信息 数据模型
class cal(models.Model):
value_a = models.CharField(max_length=10)
value_b = models.CharField(max_length=10)
result = models.CharField(max_length=10)
说明:每个模型(model)都被表示为 django.db.models.Model 类的子类,从它继承了操作数据库需要的所有方法。
数据迁移(Migrations)
每次models.py文件发生变化都需要执行2条指令
对模型的更改创建新的迁移表
python manage.py makemigrations
应用迁移到数据库中
python manage.py migrate
Views视图函数
Django 中视图即函数,path函数将url映射到视图
from django.shortcuts import render
import requests
import json
from .models import cal
# Create your views here.
def home(request):
api_request = requests.get("https://api.github.com/users?since=0")
api = json.loads(api_request.content)
return render(request, 'home.html', {"api": api})
def user(request):
# import requests
if request.method == 'POST':
user = request.POST['user']
user_request = requests.get("https://api.github.com/users/" + user)
user_name = json.loads(user_request.content)
name = user_name['name']
company = user_name['company']
follower = user_name['followers']
cal.objects.create(value_a=name, value_b=company, result=follower)
return render(request, 'user.html', {'user_name': user_name})
else:
return Calllist(request)
# def addinfo(request):
def Calllist(request):
data = cal.objects.all()
# for data in spldata:
# name = data.value_a
# location = data.value_b
# follows = data.result
return render(request, 'list.html', {'data': data} )
将url映射到视图
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name="home"),
path('user/', views.user, name="user"),
path('list/', views.Calllist, name="list"),
]
Templates/base.html,home.html,user.html,list.html
Bootstrap中获取模板文件,编写home.html,user.html,list.html,
使用{% extends 'base.html'%}继承base.html文件。
{% block content %}
Hub交友
{% block content %}
{% endblock %}