自己之前用Flask撸过网站,现在重新学习Django框架,网上博客教程不少,不想完全模仿博客教程。
所以自己构思一个和NBA有关系的网站。
目前构思的基本功能是用户基本功能: 注册/登录/注销/修改密码/重置密码
博客功能:发布博客/发表评论/点赞
其他自定义功能:自定义头像 / 多功能登录(邮箱或者用户名都可登录)
这篇主要记录一下首页和球队信息的实现.
目前不涉及前端美化,只设计到功能的实现
开发环境:
Django 2.1.5 + Python 3.5 + MySQL
环境的搭建就不在这里叙述了,网上大量文章
1: 首页的简单建立
在首页上,主要设计是显示30个球队的名字,并通过点击每个名字可以进入球队详细描述页面
先创建名为NBAsite的项目,并在其中首先创建mainsite和team两个app,并在setting中做好对应设置
mainsite--->对应主要模型和主页的建立
team--->对应每个单独球队页面的介绍信息,发布文章等功能
2: 建立球队信息的模型
from django.db import models
class Team(models.Model):
team_id = models.AutoField('球队序号',primary_key=True)
team_chinese_name = models.CharField('球队中文名称',max_length=50,default='zh_name')
team_english_name = models.CharField('球队英文名称',max_length=50,default='en_name')
team_conference = models.CharField('所属联盟',max_length=50,default='conference')
team_location = models.CharField('所属城市',max_length=50,default='city')
def __str__(self):
return self.team_chinese_name
切记注意,如果在创建模型过程中,不是一次完成模型建立的,比如先创建了3个字段,后续又添加了2个字段,这时候Django的ORM会要求你对原来已经存在的行数进行那个字段数据的添加,或者要求你添加默认值.
所以基本上模型的每个字段里,都设置了default值.
之后我通过CSV文件向MYSQL里面导入了球队所有的信息
3:views视图函数及前端模板
球队信息建立完以后,需要设置views函数了,通过Team模型选出所有球队的QuerySet,这是一个可以迭代的对象.
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})
然后我们来看一下前端模板,我不想所有的前端模板都需要重复写所有代码,所以建立了一个base_page.html,放在项目根目录templates下面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{% block title %}首页{% endblock %} - NBA Site</title>
</head>
<body>
<a href="{% url 'mainsite:main_page' %}">首页</a><br>
{% block content %}
{% endblock %}
</body>
</html>
这样,网页title后缀就永远是 - NBA Site了,页面title可以自行替换
然后在body里面,每个页面都会放一个首页按钮,关于链接,后面再说.
随后,再来添加主页的内容
{% extends 'base_page.html' %}
{% block title %}球队总览页面{% endblock %}
{% block content %}
{% for team in team_list %}
<a href="{% url 'team:team_page' team.team_id %}">{{ team.team_chinese_name }}</a>
{% endfor %}
{% endblock %}
球队名字上的超链接暂时忽略,后面再建立.
4: URL路由配置
主页的路由配置如下,从views里面导入刚才写的函数,这样运行服务器,主页就可以看到了
python manage.py runserver
from django.urls import path
from . import views
app_name='mainsite'
urlpatterns = [
path('',views.index_page,name='main_page')