首页 > 其他分享 >博客园步骤

博客园步骤

时间:2023-12-27 14:59:37浏览次数:37  
标签:form models 步骤 博客园 length max import data

一、新建项目以及app名字

在pycharm左上角file中点击 new project... 点击左侧django 在右面板写项目名、app名以及选择Python解释器,点击apply 再确定

 

 

 

之后新建静态文件夹static,在static文件夹下新建CSS和js文件,再去setting中配置如下:

STATIC_URL = '/static/'
STATICFILES_DIRS=[
    os.path.join(BASE_DIR,'static')
]


#修改链接数据库,USER可能会写成os.getenv('user')(环境变量去进行添加操作)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME':'bbs',
'HOST':'127.0.0.1',
'POST':3306,
'USER':'root',
'PASSWORD':'123321',
}
}
 

 

 

 

 __init__.py:
import pymysql

pymysql.install_as_MySQLdb()

 

 

 

 

models.py:

from django.db import models

# Create your models here.



#用户上传的文件一般放到media文件夹中
from django.contrib.auth.models import AbstractUser

class UserInfo(AbstractUser):
    phone=models.CharField(max_length=32)
    #upload_to文件上传以后的存放路径
    #FileField本质是varchar类型
    avatar=models.FileField(upload_to='avatar/',default='avatar/default.png')
    blog=models.OneToOneField(to='Blog',on_delete=models.CASCADE)



class Blog(models.Model):
    site_title=models.CharField(max_length=32)
    site_name= models.CharField(max_length=32)
    #每个人样式不同(文件地址)
    site_style= models.CharField(max_length=32)



class Tag(models.Model):
    name=models.CharField(max_length=32)
    blog=models.ForeignKey(to='Blog')


class Category(models.Model):
    name = models.CharField(max_length=32)
    blog = models.ForeignKey(to='Blog')



class TagToArticle(models.Model):
    tag=models.ForeignKey(to='Tag')
    article=models.ForeignKey(to='Article')


class Article(models.Model):
    title = models.CharField(max_length=32)
    desc= models.CharField(max_length=128)
    #大文本 样式展现出来是一个大方框
    content=models.TextField()
    cerate_time=models.DateTimeField(auto_now_add=True)


    #关联关系
    blog=models.ForeignKey(to='Blog',on_delete=models.CASCADE)
    category=models.ForeignKey(to='Category',on_delete=models.CASCADE)
    #多对多关系
    tag=models.ManyToOneRel(to='Tag',through='TagToArticle',through_fields=('article','tag'))




class UpAndDown(models.Model):
    user=models.ForeignKey(to='UserInfo')
    article = models.ForeignKey(to='Article')
    #
    is_up=models.BooleanField()
    create_time=models.DateTimeField(auto_now_add=True)



class Commit(models.Model):
    user = models.ForeignKey(to='UserInfo')
    article = models.ForeignKey(to='Article')
    content=models.CharField(max_length=256)
    create_time = models.DateTimeField(auto_now_add=True)


    #自关联
    commit_id=models.ForeignKey(to='self',on_delete=models.CASCADE)
#级联删除不完整使用时根据需要自行添加

 

 

 

 

再去setting中配置:

#扩写auth_UserInfo表,是app名字+user表名
AUTH_USER_MODEL='blog.UserInfo'

 

 

 

 

去数据库新建数据库:

数据库名:bbs

字符集:utf8--UTF-8 Unicode

建立好新表之后再进行迁移

在blog文件夹中新建blog_form.py:


#校验
from django import forms
from django.forms import widgets
from blog import models

from django.forms import ValidationError

class RegisterForm(forms.Form):
username = forms.CharField(required=True, max_length=18, min_length=3,label='用户名',
error_messages={'required': '该字段必填',
'max_length': '做大长度为18',
'min_length': '最短为3'},
widgets=widgets.TextInput(attrs={'class': 'form-control'}))
password = forms.CharField(required=True, max_length=18, min_length=3,label='密码',
error_messages={'required': '该字段必填',
'max_length': '做大长度为18',
'min_length': '最短为3'},
widgets=widgets.PasswordInput(attrs={'class': 'form-control'}))
re_password = forms.CharField(required=True, max_length=18, min_length=3,label='确认密码',
error_messages={'required': '该字段必填',
'max_length': '做大长度为18',
'min_length': '最短为3'},
widgets=widgets.PasswordInput(attrs={'class': 'form-control'}))
email = forms.EmailField(required=True,label='邮箱',
error_messages={'required': '该字段必填'},
widgets=widgets.EmailInput(attrs={'class': 'form-control'}))


#用户名如果存在了 就不能注册
def clean_username(self):
username=self.cleaned_data.get('username')
#去数据库查询
user=models.UserInfo.objects.filter(username=username).count()
if user: #不合法
raise ValidationError('用户名已经存在')
else:
return username

#校验两次密码是否一致
def clean(self):
password=self.cleaned_data.get('password')
re_password=self.cleaned_data.get('re_password')
if re_password==password:
return self.cleaned_data
else:
raise ValidationError('两次密码不一致')
 

 

 

 

 

urls.py:

from django.contrib import admin
from django.urls import path
from blog import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('register/',views.register),
]

 

 

 

views.py:

from django.shortcuts import render
from django.http import JsonResponse
from blog import models
# Create your views here.
from blog.blog_form import RegisterForm

def register(request):
if request.method == 'GET':
#实例化 传到register.html中就可以使用
form=RegisterForm()
return render(request,'register.html',context={'form':form})
elif request.method=='POST':
#校验数据是否合法
res={'code':100,'msg':'注册成功'}
form=RegisterForm(data=request.POST)
if form.is_valid():
#保存到数据库
data=form.cleaned_data #{username:zs,password:123,avatar:文件对象}
data.pop('re_password')#在字典中 所以需要删除 得到上面这个字典
if not data.get('avatar'):
data.pop('avatar')
models.UserInfo.objects.create_user(**data)
#返回会被ajax接收到
return JsonResponse(res)
else:
#数据校验不通过
res['code']=101 #101标识注册失败
res['msg']='数据验证失败'
res['error']=form.errors
return JsonResponse(res)
//需要迁移数据库

 

 

register.html:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="/static/bootstrap/css/bootstrap-theme.min.css">
<script scr="/static/jquery-3.3.1/jquery-3.3.1.min.js"></script>
<title>注册</title>
</head>
<body>
<div class="container-fluid">
<div class="row">
<h1 class="text-center">注册功能</h1>
<div class="col-md=6 col-md-offset-3">

<form id=""form>
{% csrf_token %}
{% for foo in form %}
<div class="form-group">
<label for="{{ foo.auto_id }}">{{ foo.label }}</label>
{{ foo }}
</div>
{% endfor %}
<div class="form-group">
{# 焦点 实现点击图片和头像文字也可以上传头像#}
<label for="id_myfile">头像</label>
{# 默认头像图片路径以及图片高宽#}
<img src="/static/img/default.png" alt="" id="id_img" height="80" width="80" style="margin-left: 10px ">
{# 根据id实现label中焦点 将上传文件按键以及文字隐藏更加美观#}
<input type="file" name="myfile" id="id_myfile" style="display: none">
</div>
<div class="text-center">
<input type="button" value="注册" id="id_submit" class="btn btn-danger">
</div>
</form>>
</div>
</div>
</div>
</body>
<script>
//放文件的标签发生变化,我们把文件搞出来,放到img标签中
$("#id_myfile").change(function(){
//借助于文件阅读器
var filereader = new FileReader()
//把图片读到filereader对象中
//$('id_myfile')[0].files[0]
filereader.readAsDataURL($('#id_myfile')[0].files[0])
//$('#id_img').attr('src','https://account.cnblogs.com/images/registersideimg
//$('#id_img').attr('src',filereader.result)//这样不行,文件没读完
filereader.onload=function(){
//文件完全读到文件阅读器以后再执行
$('#id_img').attr('src',filereader.result)
}

})

$("#id_submit").click(function () {
var formdata=new FormData()
formdata.append('avatar',$('#id_myfile')[0].files[0])
var ser=$('#form').serializeArray()
$.each(ser,function(k,v){
formdata.append(v.name,v.value)
})

$.ajax({
url:'/register/',
method:'post',
processData:false,
contentType:false,
data:formdata,
success:function(data){
if (data.code==100){
console.log(data.msg)
//js控制的跳转 本地跳转
location.href=data.url
}else {
//有错误 需要渲染页面
}
}
})
})
</script>
</html>

 

标签:form,models,步骤,博客园,length,max,import,data
From: https://www.cnblogs.com/97zs/p/17922175.html

相关文章

  • CRM是如何分配销售资源的?概念和操作步骤解析
     我们知道CRM系统可以用来划分商机,但你知道如何借助CRM系统科学分配销售资源吗?通过阈值功能可以平衡销售人员工作量,最大化利用客户资源,全面提升转化效率。协助销售团队提高工作效率,跟进销售过程,推动成交。概念解释创建阈值:代表某个时间段内可以分配给某个员工的最大记录数......
  • 博客园 OpenAPI 调用记录(Python)
    目录申请OpenAPIOpenAPI调用申请OpenAPIhttps://oauth.cnblogs.com通过后,你将得到ClientId和ClientSecretOpenAPI调用接口文档:https://api.cnblogs.com/Help请求示例:Client_Credentials授权importrequestsimportjsonfromurllibimportparseClientId='......
  • 【干货】Windows测试拉流工具及操作步骤大汇总
    关于技术的文章小编给大家分享过很多,今天再给大家分享一点干货:Windows系统中可以测试拉流的工具汇总,感兴趣的朋友可以进行深入了解哦。1、EasyStreamClientTool工具该工具在easynvr目录下,进入下图该目录下:随后在路径窗口输入cmd,回车,进入命令行;输入拉流命令,例:EasyStrea......
  • [升级] MySQL升级步骤及注意事项
    升级步骤a.备份数据库(包括schema,data,routines(function,triggersetc)b.修复util.checkForZSzerverUpgrade()发现的问题c.添加innodb_fast_shutdown=0来彻底的关闭mysqld.更新mysqlbinaries,可以使用tarball,RMP,mis等注意事项a.从5.7升级到8.0,或者在8.0.x之间升级可以......
  • DC电源模块的安装和使用步骤是什么?
    BOSHIDADC电源模块的安装和使用步骤是什么?安装和使用DC电源模块的步骤如下:1.确定模块的电源需求:查阅模块的规格和说明书,确定所需的输入电压范围和输出电流能力。2.配置电源线:根据电源模块的输入要求,选择合适的电源线。确保电源线具备足够的额定电流和正确的接线方式。3.连接电......
  • Maven安装步骤--linux
    安装 maven环境前,需要先安装java环境Linux安装jdk1、maven 官网下载安装包maven官网地址:Maven–DownloadApacheMaven历史版本3.6.3为例:  2、安装maven 2.1创建maven文件夹,仓库文件夹mkdir-p/usr/local/maven  mkdir-p/usr/local/maven/reposi......
  • Ubuntu环境下SomeIP/CommonAPI环境搭建详细步骤
    环境搭建1.Boost安装下载Boost源码:https://www.boost.org/users/download/编译安装首先安装编译所需依赖sudoapt-getinstallbuild-essentialg++sudoapt-getinstallinstallpython-devautotools-devsudoapt-getinstallinstalllibicu-devbuild-essentialsudoapt-......
  • JMeter对数据库的查询操作步骤详解
    提示:关于JMeter如何连接MySQL数据库,前面文章已经详解的讲解过了。因为配置数据库连接是比较固定的步骤,这里就不重复讲解了。本篇文章主要详细说明,使用JDBCRequest组件,如何对数据库进行查询的各种操作。JMeter中查询语句的操作步骤:添加测试计划。添加线程组,设置线程组的次数。添加J......
  • 博客园代码添加行号(无需添加样式)
    个人->管理->设置->显示行号  添加代码代码保存后文章保存后......
  • Kissat_MAB_prop系列程序的编译步骤
    Kissat_MAB_prop是2023年SAT竞赛最新最优的求解器,其编译有自己的特点。与2023年之前的版本编译略有不同,需要按下面3个步骤来进行。 1.应为加载了bliss,所以第一步先在bliss文件夹路径下make,得到bliss.exe;2.回退到sources路径下:(1)makeclean (2)./configure (3)maket......