博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BBS项目
阅读量:6191 次
发布时间:2019-06-21

本文共 6936 字,大约阅读时间需要 23 分钟。

首先考虑是么数据库,如果不想使用默认数据库,使用MySQL的话,

#setingsDATABASES = {    'default': {        'ENGINE': 'django.db.backends.mysql',        'NAME':'bbs',        'HOST':'127.0.0.1',        'PORT':3306,        'USER':'root',        'PASSWORD':'123'    }}#__init__import pymysqlpymysql.install_as_MySQLdb()
修改settings以及__init__

创建static文件夹,并修改settings

STATICFILES_DIRS = (    os.path.join(BASE_DIR, 'static'),)#注意,一定要加逗号(  (BASE_DIR, 'static'),   )
View Code

如果要使用auth组件,继承AbstractUser,需要在settings添加

AUTH_USER_MODEL = 'blog.UserInfo'#blog是APP名,UserInfo是继承AbstractUser的表
View Code

创建表(执行数据库迁移命令)

from django.db import modelsfrom django.contrib.auth.models import AbstractUser# Create your models here.# UserInfo这个表,继承AbstractUser,因为要用auth组件class UserInfo(AbstractUser):    nid = models.AutoField(primary_key=True)    # username=models.CharField(max_length=32,unique=True)    # 该字段可以为空,为该字段设置默认值,default='123455666'    phone = models.CharField(max_length=32,null=True)    # upload_to需要传一个路径    avatar = models.FileField(upload_to='avatar/', default='/static/img/default.png')    #  一对一关联blog表,to_field如果不写,默认主键    # blog_id字段存的数据是什么?blog表的---nid这个字段    blog = models.OneToOneField(to='Blog', to_field='nid')    # user表    #     id name  blog_id    #     1  111    1    #     2  111    1class Blog(models.Model):    nid = models.AutoField(primary_key=True)    title = models.CharField(max_length=64)    site_name = models.CharField(max_length=32)    theme = models.CharField(max_length=64)class Category(models.Model):    nid = models.AutoField(primary_key=True)    title = models.CharField(max_length=64)    # ForeignKey跟OneToOneField的区别?    #OneToOneField unique=True    blog = models.ForeignKey(to='Blog', to_field='nid', null=True)class Tag(models.Model):    nid = models.AutoField(primary_key=True)    title = models.CharField(max_length=64)    blog = models.ForeignKey(to='Blog', to_field='nid', null=True)class Article(models.Model):    nid = models.AutoField(primary_key=True)    title = models.CharField(max_length=64)    # 摘要,简单描述    desc = models.CharField(max_length=255)    # 大文本TextField()    content = models.TextField()    # 存时间类型,auto_now_add每插入一条数据,时间自动写入当前时间,    # auto_now,这条数据修改的时候,会更新成当前时间    create_time = models.DateTimeField(auto_now_add=True)    blog = models.ForeignKey(to='Blog', to_field='nid', null=True)    category = models.ForeignKey(to='Category', to_field='nid', null=True)    # through_fields应该怎么写?    # 中介模型,手动创建第三张表    tag = models.ManyToManyField(to='Tag', through='ArticleTOTag', through_fields=('article', 'tag'))    # 这样写,会自动创建第三张表    # tag = models.ManyToManyField(to='Tag')# 手动创建第三张表class ArticleTOTag(models.Model):    nid = models.AutoField(primary_key=True)    article = models.ForeignKey(to='Article', to_field='nid')    tag = models.ForeignKey(to='Tag', to_field='nid')    # article和tag应不应该联合唯一?    # article_id  1    # tag_id     1class Commit(models.Model):    nid = models.AutoField(primary_key=True)    user = models.ForeignKey(to='UserInfo', to_field='nid')    article = models.ForeignKey(to='Article', to_field='nid')    content = models.CharField(max_length=255)    create_time = models.DateTimeField(auto_now_add=True)    # 这样写是可以的    # parent_id=models.IntegerField()    # 自关联    # parent_id=models.ForeignKey(to='Commit',to_field='nid')    parent = models.ForeignKey(to='self', to_field='nid',null=True)class UpAndDown(models.Model):    nid = models.AutoField(primary_key=True)    user = models.ForeignKey(to='UserInfo', to_field='nid')    article = models.ForeignKey(to='Article', to_field='nid')    is_up = models.BooleanField()    class Meta:        # 写这些,只是为了不写脏数据,联合唯一        unique_together = (('user', 'article'),)
View Code

 

 

登陆界面设计

    
Title
#这里的for等于input的id,那么在点击用户名时,光标自动弹到input框中
login.html

 

from django.shortcuts import render,HttpResponsefrom PIL import Image# Create your views here.import randomfrom io import BytesIOdef login(request):    if request.method == 'GET':        return render(request,'login.html')#方式一#直接在static静态文件夹中引用图片# def get_valid_code(request):#     with open('static/img/1','rb') as f:#         data = f.read()#     return HttpResponse(data)# 方式二#自动生成图片# pip3 install Pillowdef get_random_color():# 为了随机获得图片颜色    return (random.randint(0,255),random.randint(0,255),random.randint(0,255))def get_valid_code(request):    # new()生成一张图片    # 三个参数    # 参数一是图片模式,RGB是三原色,参数二是图片大小,前边是款宽,后边是高    #     参数三是颜色    # img=Image.new('RGB',(360,35),color='green')        方式一    # img=Image.new('RGB',(360,35),color=(0,0,255))      方式二    # img=Image.new('RGB',(360,35),color=get_random_color())   方式三# 存取方式一    # # 保存到本地    # with open('valid_code.png','wb')as f:    #     # 直接用img的save方法,参数一是文件,参数二是图片格式    #     img.save(f,'png')    # #打开文件,再返回给前端    # with open('valid_code.png','rb')as f:    #     data=f.read()    #     return HttpResponse(data)    # 存取方式二    # 将图片保存到内存中,存取快,并且解释器可以自动清理资源    img=Image.new('RGB',(360,35),color=get_random_color())    f=BytesIO()    img.save(f,'png')    data=f.getvalue() #用getvalue取值,此时会把f的内存文件中的所有内容读取出来    return HttpResponse(data)
随机验证码背景设计,无验证码版本

 

 

 

 

from django.shortcuts import render,HttpResponse from PIL import Image # Create your views here. import random from io import BytesIO def login(request): if request.method == 'GET': return render(request,'login.html') #方式一 #直接在static静态文件夹中引用图片 # def get_valid_code(request): #     with open('static/img/1','rb') as f: #         data = f.read() #     return HttpResponse(data) # 方式二 #自动生成图片 # pip3 install Pillow def get_random_color():# 为了随机获得图片颜色 return (random.randint(0,255),random.randint(0,255),random.randint(0,255)) def get_valid_code(request): # new()生成一张图片     # 三个参数     # 参数一是图片模式,RGB是三原色,参数二是图片大小,前边是款宽,后边是高     #     参数三是颜色     # img=Image.new('RGB',(360,35),color='green')        方式一     # img=Image.new('RGB',(360,35),color=(0,0,255))      方式二     # img=Image.new('RGB',(360,35),color=get_random_color())   方式三 # 存取方式一     # # 保存到本地     # with open('valid_code.png','wb')as f:     #     # 直接用img的save方法,参数一是文件,参数二是图片格式     #     img.save(f,'png')     # #打开文件,再返回给前端     # with open('valid_code.png','rb')as f:     #     data=f.read()     #     return HttpResponse(data)     # 存取方式二     # 将图片保存到内存中,存取快,并且解释器可以自动清理资源 img=Image.new('RGB',(360,35),color=get_random_color())     f=BytesIO()     img.save(f,'png')     data=f.getvalue() #用getvalue取值,此时会把f的内存文件中的所有内容读取出来 return HttpResponse(data)

转载于:https://www.cnblogs.com/pdun/p/10824656.html

你可能感兴趣的文章
优酷1080P的KUX视频如何快速转换成MP4格式
查看>>
Java004-面向对象(基础)
查看>>
大前端时代安全性如何做
查看>>
如何做抖音GIF表情包
查看>>
发布/订阅者模式
查看>>
如何使用PostMan?
查看>>
Weex系列(4) —— 老生常谈的三端统一
查看>>
C++反射机制:可变参数模板实现C++反射
查看>>
不要被集成环境束缚住你前进的脚步
查看>>
数据分析用它就够了 | 37 个场景你要用集算器
查看>>
ES6 系列之 defineProperty 与 proxy
查看>>
深入理解苹果系统(Unicode)字符串的排序方法
查看>>
javaScript面向对象编程-继承(二)
查看>>
python3与Excel的完美结合
查看>>
Class:向传统类模式转变的构造函数
查看>>
egg学习笔记(2)--静态资源,模板(ejs),路由传值
查看>>
axios学习笔记
查看>>
【Go 源码分析】从 sort.go 看排序算法的工程实践
查看>>
兼容MySQL的开源分布式数据库SequoiaDB在去哪儿网的实践
查看>>
吴恩达机器学习笔记-过拟合
查看>>