自己之前用Flask擼過(guò)網(wǎng)站该面,現(xiàn)在重新學(xué)習(xí)Django框架夭苗,網(wǎng)上博客教程不少,不想完全模仿博客教程隔缀。
所以自己構(gòu)思一個(gè)和NBA有關(guān)系的網(wǎng)站题造。
目前構(gòu)思的基本功能是用戶(hù)基本功能: 注冊(cè)/登錄/注銷(xiāo)/修改密碼/重置密碼
博客功能:發(fā)布博客/發(fā)表評(píng)論/點(diǎn)贊
其他自定義功能:自定義頭像 / 多功能登錄(郵箱或者用戶(hù)名都可登錄)
這篇主要記錄一下首頁(yè)和球隊(duì)信息的實(shí)現(xiàn).
目前不涉及前端美化,只設(shè)計(jì)到功能的實(shí)現(xiàn)
開(kāi)發(fā)環(huán)境:
Django 2.1.5 + Python 3.5 + MySQL
環(huán)境的搭建就不在這里敘述了猾瘸,網(wǎng)上大量文章
1: 首頁(yè)的簡(jiǎn)單建立
在首頁(yè)上界赔,主要設(shè)計(jì)是顯示30個(gè)球隊(duì)的名字,并通過(guò)點(diǎn)擊每個(gè)名字可以進(jìn)入球隊(duì)詳細(xì)描述頁(yè)面
先創(chuàng)建名為NBAsite的項(xiàng)目牵触,并在其中首先創(chuàng)建mainsite和team兩個(gè)app淮悼,并在setting中做好對(duì)應(yīng)設(shè)置
mainsite--->對(duì)應(yīng)主要模型和主頁(yè)的建立
team--->對(duì)應(yīng)每個(gè)單獨(dú)球隊(duì)頁(yè)面的介紹信息,發(fā)布文章等功能
2: 建立球隊(duì)信息的模型
from django.db import models
class Team(models.Model):
team_id = models.AutoField('球隊(duì)序號(hào)',primary_key=True)
team_chinese_name = models.CharField('球隊(duì)中文名稱(chēng)',max_length=50,default='zh_name')
team_english_name = models.CharField('球隊(duì)英文名稱(chēng)',max_length=50,default='en_name')
team_conference = models.CharField('所屬聯(lián)盟',max_length=50,default='conference')
team_location = models.CharField('所屬城市',max_length=50,default='city')
def __str__(self):
return self.team_chinese_name
切記注意揽思,如果在創(chuàng)建模型過(guò)程中袜腥,不是一次完成模型建立的,比如先創(chuàng)建了3個(gè)字段钉汗,后續(xù)又添加了2個(gè)字段羹令,這時(shí)候Django的ORM會(huì)要求你對(duì)原來(lái)已經(jīng)存在的行數(shù)進(jìn)行那個(gè)字段數(shù)據(jù)的添加锡宋,或者要求你添加默認(rèn)值.
所以基本上模型的每個(gè)字段里,都設(shè)置了default值.
之后我通過(guò)CSV文件向MYSQL里面導(dǎo)入了球隊(duì)所有的信息
3:views視圖函數(shù)及前端模板
球隊(duì)信息建立完以后特恬,需要設(shè)置views函數(shù)了执俩,通過(guò)Team模型選出所有球隊(duì)的QuerySet,這是一個(gè)可以迭代的對(duì)象.
from django.shortcuts import render
from .models import *
def index_page(request):
team_list = Team.objects.all()
return render(request,'index.html',{'team_list':team_list})
然后我們來(lái)看一下前端模板癌刽,我不想所有的前端模板都需要重復(fù)寫(xiě)所有代碼役首,所以建立了一個(gè)base_page.html,放在項(xiàng)目根目錄templates下面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{% block title %}首頁(yè){% endblock %} - NBA Site</title>
</head>
<body>
<a href="{% url 'mainsite:main_page' %}">首頁(yè)</a><br>
{% block content %}
{% endblock %}
</body>
</html>
這樣显拜,網(wǎng)頁(yè)title后綴就永遠(yuǎn)是 - NBA Site了衡奥,頁(yè)面title可以自行替換
然后在body里面,每個(gè)頁(yè)面都會(huì)放一個(gè)首頁(yè)按鈕远荠,關(guān)于鏈接矮固,后面再說(shuō).
隨后,再來(lái)添加主頁(yè)的內(nèi)容
{% extends 'base_page.html' %}
{% block title %}球隊(duì)總覽頁(yè)面{% endblock %}
{% block content %}
{% for team in team_list %}
<a href="{% url 'team:team_page' team.team_id %}">{{ team.team_chinese_name }}</a>
{% endfor %}
{% endblock %}
球隊(duì)名字上的超鏈接暫時(shí)忽略譬淳,后面再建立.
4: URL路由配置
主頁(yè)的路由配置如下档址,從views里面導(dǎo)入剛才寫(xiě)的函數(shù),這樣運(yùn)行服務(wù)器邻梆,主頁(yè)就可以看到了
python manage.py runserver
from django.urls import path
from . import views
app_name='mainsite'
urlpatterns = [
path('',views.index_page,name='main_page')