Django_基本使用

2020-03-10  本文已影响0人  Lutous
创建项目

django-admin startproject 项目名称

  • __init__.py:说明mysql_django是一个python包
  • settings.py:项目的配置文件
  • urls.py:进行url路由配置
  • wsgi.py:web服务器和Django交互入口
  • manage.py:项目管理文件
创建应用

python manage.py startapp 应用名

  • __init__.py:说明目录是一个Python模块
  • models.py:数据库项目的内容
  • views.py:接口请求,进行处理,定义处理函数,视图函数
  • tests.py:写测试代码的文件
  • admin.py:网站后台管理相关的文件
建立联系

建立应用和项目之间的联系,需要修改settings.py 中的 INSTALLED_APPS配置项,对应用进行注册

INSTALLED_APPS = [
   'django.contrib.admin',
   'django.contrib.auth',
   'django.contrib.contenttypes',
   'django.contrib.sessions',
   'django.contrib.messages',
   'django.contrib.staticfiles',
   'banting',
]
ORM框架:
  • Object:对象-类
  • Relations:关系,关系数据库中的表
  • Mapping:映射,通过类和对象操作对应的数据表
数据模型

在应用目录下models.py文件中创建数据模型

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models


# 设计和表对应的类
# 艺术家类 --- 一类
class Artist(models.Model):
   # CharField -- 字符串
   a_name = models.CharField(max_length=20)
   
   # 性别
   a_gender = models.BooleanField(default=False)

   # DateField -- 日期类型
   a_birthday = models.DateField()

   def __str__(self):
       return self.a_name.encode('utf-8')


# 专辑模型类 --- 多类
class Albums(models.Model):
   # 专辑名称
   album_name = models.CharField(max_length=20)
   # 备注
   album_common = models.CharField(max_length=128)
   # 歌曲数量
   album_count = models.IntegerField()
   # 关系属性,建立艺术及与专辑之间的一对多关系
   # 关系属性对应的表的字段名格式: 关系属性名_id (h_artist_id)
   album_book = models.ForeignKey('Artist')

   def __str__(self):
       return self.album_name.encode('utf-8')
根据模型类生成数据表:
  • 生成成迁移文件:python manage.py makemigrations

  • 执行迁移生成表:python manage.py migrate

执行成功之后,项目根目录下会生成db.sqlite3数据库文件

通过模型类操作数据表

进入项目shell命令:python manage.py shell

from banting.models import Artist
from datetime import date
a = Artist()
a.a_name='周杰伦'
a.a_birthday=date(2000,1,1)
a.save() # 保存
Artist.objects.get(id=1) # 查询banting_artist表中id为1的数据
a.a_birthday = date(1988,1,1) # 修改
a.delete() # 删除
...
album.album_book = a # 给关系属性赋值,值为一类的对象
Artist.objects.all() # 查询所有内容
a.albums_set.all() # 查询一类对象索关联的所有多类对象
后台管理
  • 语言和时区的本地化 --- 修改settings.py文件
# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hans'

# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Shanghai'
创建管理员

命令:python manage.py createsuperuser
输入账号、邮箱、密码即可创建后台管理用户

打开后台管理界面

启动服务:python manage.py runserver
在浏览器中输入:127.0.0.1:8000/admin/

注册模型

在应用下admin.py中注册模型类

from banting.models import *


# 自定义模型管理类
class ArtistInfoAdmin(admin.ModelAdmin):
   """图书模型管理类"""
   list_display = ['id', 'a_name', 'a_gender', 'a_birthday']


class AlbumsInfoAdmin(admin.ModelAdmin):
   list_display = ['id', 'album_name', 'album_common', 'album_count']


# 注册模型类
admin.site.register(Artist, ArtistInfoAdmin)
admin.site.register(Albums, AlbumsInfoAdmin)

视图

通过浏览器请求一个页面时,使用试图函数来处理这个请求,试图函数处理之后,要给浏览器返回页面内容。

  • 视图函数在应用views.py文件中定义
from django.http import HttpResponse


# 1.定义视图函数, HttpRequest
# 2.进行url配置,建立url地址和视图的对应关系
def index(request):
   """进行请求处理,对M和T进行交互"""
   return HttpResponse("Hello Django")
  • url配置过程
    1、在应用目录下创建urls.py文件
    2、配置项目urls.py文件
# 应用urls文件
from django.conf.urls import url
from banting import views


urlpatterns = [
   url(r'^index$', views.index), # 建立
]
# 项目urls文件
from django.conf.urls import include
urlpatterns = [
   url(r'^admin/', admin.site.urls),
   url(r'^', include("banting.urls")),
]

浏览器中输入:127.0.0.1:8000/index,界面显示“Hello Django”

模板
  • 创建模板文件夹


  • 设置模板文件
    1、项目settings.py文件配置模板路径('DIRS': [os.path.join(BASE_DIR, 'templates')],)
    2、项目urls.py文件配置
urlpatterns = [
   url(r'^index$', views.index),
   url(r'^artist$', views.show_artist),
   url(r'^artist/(\d+)$', views.show_album),
]
  • 使用模板文件
# 项目views.py
def show_artist(request):
   """显示歌手名称"""
   artists = Artist.objects.all()
   return render(request, 'banting/show_artist.html', {'artists': artists})


def show_album(request, a_id):
   """显示专辑详情"""
   artist = Artist.objects.get(id=a_id)

   # 查询和artist关联的专辑信息
   albums = artist.albums_set.all()
   return render(request, 'banting/show_album.html', {'artist': artist, 'albums': albums})
<!--show_album.html-->
<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>显示专辑信息</title>
</head>
<body>
<h1>{{artist.a_name}}</h1>
<url>
   {% for music in albums %}
       <li>{{music.album_name}} --- {{album_.h_common}}</li>
   {% empty %}
       <li>专辑内没有歌曲信息</li>
   {% endfor %}
</url>
</body>
</html>
<!--show_artist.html-->
<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>显示艺术家信息</title>
</head>
<body>
艺术家信息如下:
{% for artist in artists %}
<li><a href="/artist/{{ artist.id }}">{{ artist.a_name }}</a></li>
{% endfor %}
</body>
</html>

浏览器中输入:127.0.0.1:8000/artist


上一篇下一篇

猜你喜欢

热点阅读