Django(一)

安装

pip install django

创建项目
在这里插入图片描述
运行

python manage.py runserver

用浏览器打开,出现下面界面,说明成功

在这里插入图片描述
生成迁移文件

python manage.py migrate

创建超级用户

python manage.py createsuperuser
按提示输入用户名,密码,邮箱可直接回车跳过

创建成功后即可登录

url:127.0.0.1:8000/admin
登录成功后的界面:

在这里插入图片描述
在settings.py中设置中文及时区
在这里插入图片描述
现在旧变成中文了
在这里插入图片描述

项目案例

  1. 创建项目

django-admin startproject BlogProject

项目目录说明
在这里插入图片描述
在这里插入图片描述
settings.py的介绍

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
2. 配置数据库
在这里插入图片描述

  1. 创建应用

python manage.py startapp blog

2 将新建的应用安装到settings.py中的INSTALLED_APPS中
只要新建应用就必须写进去,可以新建多个应用

  1. 配置数据库
    在这里插入图片描述
  2. 安装pymysql,在BlogProject/init.py中
import pymysql
pymysql.install_as_MySQLdb()
  1. 记得创建数据库

create database BlogProject DEFAULT CHARSET utf8;

  1. 写数据库的表及字段,在blog/models.py中
from django.contrib.auth.models import User
from django.db import models

# Create your models here.
class Tag(models.Model):
    name = models.CharField(max_length=30, verbose_name="标签名", db_index=True)

    class Meta():
        db_table = "标签名"


    def __str__(self):
        return  self.name
class Category(models.Model):
    name = models.CharField(max_length=30, verbose_name="分类名", db_index=True)

    class Meta():
        db_table = "分类名"
        ordering = ['id']

    def __str__(self):
        return self.name
class Post(models.Model):
    title = models.CharField(max_length=100, db_index=True)
    body = models.TextField()  # 博客内容

    # 创建博客的时间
    created_time = models.DateTimeField()
    # 最后依次修改博客的时间
    modified_time = models.DateTimeField()
    # 阅读量
    read_num = models.IntegerField(default=0)
    # 评论数量
    comment_num = models.IntegerField(default=0)

    # 标签-博客(多对多),
    tags = models.ManyToManyField(Tag)
    # 分类-分类(一对多)
    category = models.ForeignKey(Category, on_delete=models.SET_NULL, null=True)

    # 博客的创建者名称, 必须是系统存在的用户;
    author = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)

    def __str__(self):
        return  self.title

下面是之前写book表的文件,有一些常见的知识点供参考

from django.db import models
from django.utils.html import  format_html
from django.contrib.auth.models import  User
# Create your models here.

# 关系: 书籍和英雄====一对多

class BookInfo(models.Model):
    # 默认会有主键, 为id并且自增
    # 书籍名称: 字符串区域
    btitle = models.CharField(max_length=50)
    # 书籍的出版日期, 相当于datetime.date.today()
    bpub_date = models.DateField()

    def __str__(self):
        return  '%s' %(self.btitle)
class HeroInfo(models.Model):
    hname = models.CharField(max_length=30)
    # 0: 男  1:女
    hgender = models.BooleanField()
    hcontent = models.TextField()
    # 如果是Django1.x版本, models.ForeignKey(BookInfo);
    # 如果是Django2.x版本, models.ForeignKey(BookInfo);
    # models.CASCADE: 级联删除, 如果书籍删除了, 书籍里面的英雄也就删除了
    # models.DO_NOTHING: 当删除有关联的数据库内容是会报错
    # models.SET_NULL:不是级联删除, 如果书籍删除, 那么英雄所属的书籍为Null;
    # models.SET_DEFAULT:不是级联删除, 如果书籍删除, 那么英雄所属的书籍为默认值;
    hbook = models.ForeignKey(BookInfo, on_delete=models.CASCADE)

    def gender(self):
        if self.hgender: # hgender=1
            # 设置性别字段的颜色;
            return  format_html('<span style="color:red">女</span>')
        else:
            return  format_html('<span style="color:green">男</span>')


    gender.short_description = '性别'
    def __str__(self):
        return  '%s' %(self.hname)
from django.db import models

# Create your models here.
from datetime import date

from django.db import models
from django.utils import timezone




# 上传文件的编写
class MyBook(models.Model):
    name = models.CharField(max_length=100, verbose_name="书籍名称", db_index=True)
    # verbose_name: 后台管理的前端页面字段名的中文显示;
    # upload_to: 上传的指定位置; 这里是相对位置,(settings文件中必须设置MEDIA_ROOT变量的内容;)
    logo = models.ImageField(verbose_name="图书封面", upload_to="modelTest/")
    # blank=True, 字段信息可以为空白;
    pubdate  = models.DateField(db_column="出版日期", verbose_name="出版日期")
    read_num = models.IntegerField(null=True, default=0)

    class Meta():
        # 修改默认的表名为指定的表名(书籍)
        db_table = "书籍"
        # 默认是升序,
        # ordering = ['pubdate']
        # 指定按出版日期的降序进行排序;如果出版日期相同, 则按照阅读量进行降序排;
        ordering = ['-pubdate', '-read_num']


    def __str__(self):
        return  self.name

# 一个用户可以属于多个组; 一个组里面可以有多个用户; ===========多对多关系
# 用户:
# 组:
# 用户表
class Person(models.Model):
    name = models.CharField(max_length=50, verbose_name="姓名")
    def __str__(self):
        return  self.name
# 用户组 类名: Group  ----> modelTest_group(数据库表存储的表名)
class Group(models.Model):
    name = models.CharField(max_length=50, verbose_name="组名")
    # 设置多对多关系,并且必须关联关系表;through
    persons = models.ManyToManyField(Person, through='GrouPersons')
    # person = models.OneToOneField(Person)  # 设置一对一关系

    def __str__(self):
        return  self.name
# 我想记录某个用户加入某个组的时间和原因;
class GrouPersons(models.Model):
    # 级联不删除, 默认设置为空;
    person = models.ForeignKey(Person, on_delete=models.SET_NULL, null=True)
    group = models.ForeignKey(Group, on_delete=models.SET_NULL, null=True)
    date_joined = models.DateField(default=timezone.now()) # 某个用户加入某个组的日期;
    join_reason = models.CharField(max_length=200)  # 某个用户加入某个组的原因;

    def __str__(self):
        return  "%s-%s" %(self.group, self.person)



#
# >>> person2 = Person(name="小明")
# >>> person1 = Person(name="张三")
# >>> group1 = Group(name = "Linux兴趣小组")
# >>> group2 = Group(name = "python兴趣小组")
# >>> person1.save()
# >>> person2.save()
# >>> group1.save()
# >>> group2.save()
# >>> r1 = GrouPersons(person=person1, group=group1, join_reason='好玩')
# >>> r1.save()
# >>> group1.persons.all()
# <QuerySet [<Person: 张三>]>
# >>> r2 = GrouPersons(person=person1, group=group2, join_reason='好玩')
# >>> r2.save()
# >>> group2.persons.all()
# <QuerySet [<Person: 张三>]>
# >>> person1.group_set.all()
# <QuerySet [<Group: Linux兴趣小组>, <Group: python兴趣小组>]>



  1. 执行命令
    创建更改的文件

python manage.py makemigrations

将生成的py文件应用到数据库

python manage.py migrate

开始和前端页面交互

  1. 新建static等文件,如下
    在这里插入图片描述
  2. 在blog下面建一个urls.py文件
from django.urls import path

from blog.views import index

urlpatterns = [
    path('',index,name='index'),

]
  1. 写业务逻辑在视图函数blog/views.py
from django.shortcuts import render

# Create your views here.
from blog.models import Post


def index(request):
    return render(request, 'blog/index.html')
  1. 在BlogProject/urls.py中加入blog.urls

在这里插入图片描述
5. 在配置文件中
加入templates文件位置
在这里插入图片描述
加入static文件位置
在这里插入图片描述
6. 运行

python manage.py runserver
http://127.0.0.1:8000/blog/

  1. 在blog/admin.py中

凡是要想要用站点管理的数据表都要写进来

from django.contrib import admin

# Register your models here.
from blog.models import Tag, Post, Category

admin.site.register(Tag)
admin.site.register(Category)
admin.site.register(Post)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值