大家好,我是天空之城,今天给大家带来小福利,django搭建个人网站的源码公开(一)
**django框架的原理:**它采用的是MVT架构,m就是model数据模型,就是数据的结构和字段,比如是个人博客数据,就需要定义title和content数据类型,其他的表格之类的也需要定义相应的数据类型;v就是views就是视图也就是控制中心,所有网页显示的内容都需要在这里用函数来定义,包括从数据库中调用数据;t就是template模块,就是你要展示的具体网页内容html语言和css语言,这就是大体的框架,另外还要放一些static静态文件,比如图片,js文件之类。
当你拿到一个django文件首先需要看一下数据库配置,你先启动mysql数据库并建立相应的数据库名称,再进行数据库文件的迁移
python manage.py makemigrations
python manage.py migrate
创建网站后台用户名和密码
python manage.py createsuperuser
首先是项目目录截图
其次是视图views文件
这里每定义的一个函数就代表返回一个网页
from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse
def zhuye(request):
return HttpResponse("天空之城是帅哥")
def indexfunc(request):
return render(request,'myapp/index2.html')
from .models import Students
def students(request):
studentsList= Students.stuObj2.all()
return render(request,'myapp/students.html',{'students':studentsList})
from .models import Grades
def grades(request):
gradesList=Grades.graObj2.all()
return render(request,'myapp/grades.html',{'grades':gradesList})
def addstudent(request):
grade=Grades.graObj2.get(pk=1)
stu=Students.createStudent("霍燕",18,True,"我叫霍燕",grade,"2020/07/20","2020/07/21")
stu.save()
return HttpResponse("我是钕")
def addstudent2(request):
grade=Grades.graObj2.get(pk=1)
stu=Students.stuObj2.createStudent("黄奕",20,True,"我叫刘诗",grade,"2020/07/20","2020/07/21")
stu.save()
return HttpResponse("我是涩")
def student3(request):
studentsList=Students.stuObj2.all()[0:5]
return render(request,'myapp/students.html',{'students':studentsList})
def stupage(request,page):
page=int(page)
studentsList = Students.stuObj2.all()[(page-1)*5:page*5]
return render(request, 'myapp/students.html', {'students': studentsList})
from django.db.models import Max,Min
def studentsearch(request):
# studentsList = Students. stu0bj2. filter(sname__ .contains= “孙")
# studentsList = Students. stu0bj2. filter(sname_ startswith= "孙")
# studentsList = Students. stuobj2. filter(pk_ in=[2, 4, 6, 8, 10])
# studentsList = Students. stu0bj2. filter(sage_ gt=30)
# studentsList = Students. stuobj2. filter(lastTime__ year=2017)
studentsList = Students.stuObj2.filter(sname__contains="刘")
maxAge=Students.stuObj2.aggregate(Max('sage'))
print(maxAge)
return render(request,'myApp/students.html',{'students': studentsList})
from django.db.models import F,Q
def grades1(request):
g=Grades.graObj2.filter(ggirlnum__gt=F('gboynum'))
print(g)
return HttpResponse("你牛")
def get1(request):
a=request.GET.get('a')
b = request.GET['b']
c = request.GET.get('c')
return HttpResponse(a+" "+ b +" "+c)
def get2(request):
a = request.GET.getlist('a')
a1=a[0]
a2=a[1]
c = request.GET.get('c')
return HttpResponse(a1 + " " + a2 + " " + c)
def showregist(request):
return render(request, 'myapp/regist.html', )
def regist(request):
name = request.POST.get("name")
gender = request.POST.get("gender")
age = request.POST.get("age")
hobby = request.POST.getlist("hobby")
print(name)
print(gender)
print(age)
print(hobby)
return HttpResponse("regist")
from django.http import HttpResponseRedirect
from django.shortcuts import redirect
def redirect1(request):
# return HttpResponseRedirect('/redirect2')
return redirect('/redirect2')
def redirect2(request):
return HttpResponse("我是重定向后的视图")
def main(request):
# 取session
username = request.session.get('name', '游客')
print(username)
return render(request, 'myapp/main.html', {'username': username})
def login(request):
return render(request, 'myapp/login.html')
def showmain(request):
print("*****************")
username = request.POST.get('username')
# 存储session
request.session['name'] = username
return redirect('/main/')
from django.contrib.auth import logout
def quit(request):
# 清除session
logout(request) # 方法1,推荐
# request.session.clear() # 方法2
request.session.flush() # 方法3
return redirect('/main/')
from .models import Students
def index(request):
#return HttpResponse("到底怎么回事")
# return render(request, 'myapp/index.html')
student=Students.stuObj2.get(pk=1)
return render(request,'myapp/index.html',{"stu":student,"num":10,"str":"liushishi is a ","list":["liutao","sa","yes"]})
# return render(request, 'myapp/index.html',{"code":"<h1>jack is a sexy man</h1>"})
def students1(request):
list=Students.stuObj2.all()
return render(request,'myapp/students1.html',{"students":list})
def good(request,id,pd):
return render(request,'myapp/good.html',{"num":id,"num1":pd})
def good1(request,id):
return render(request,'myapp/good1.html',{"num":id})
def main1(request):
return render(request, 'myapp/main1.html')
def detail(request):
return render(request, 'myapp/detail.html')
def verifycode(request):
# 引入绘图模块
from PIL import Image, ImageDraw, ImageFont
# 引入随机函数模块
import random
# 定义变量,用于画面的背景色,宽,高
bgcolor = (random.randrange(20, 100), random.randrange(20, 100), random.randrange(20, 100))
width = 100
height = 50
# 创建画面对象
im = Image.new('RGB', (width, height), bgcolor)
# 创建画面对象
draw = ImageDraw.Draw(im)
# 调用画笔的point()函数绘制噪点
for i in range(0, 100):
xy = (random.randrange(0, width), random.randrange(0, height))
fill = (random.randrange(0, 255), 255, random.randrange(0, 255))
draw.point(xy, fill=fill)
# 定义验证码的备选值
str = '1234567890QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm'
# 随机选取4个值作为验证码
rand_str = ''
for i in range(0, 4):
rand_str += str[random.randrange(0, len(str))]
# 构造字体对象
font = ImageFont.truetype(r'C:\Windows\Fonts\simfang.ttf', 40)
# 构造字体颜色
fontcolor1 = (255, random.randrange(0, 255), random.randrange(0, 255))
fontcolor2 = (255, random.randrange(0, 255), random.randrange(0, 255))
fontcolor3 = (255, random.randrange(0, 255), random.randrange(0, 255))
fontcolor4 = (255, random.randrange(0, 255), random.randrange(0, 255))
# 绘制4个字
draw.text((5, 2), rand_str[0], font=font, fill=fontcolor1)
draw.text((25, 2), rand_str[1], font=font, fill=fontcolor2)
draw.text((50, 2), rand_str[2], font=font, fill=fontcolor3)
draw.text((75, 2), rand_str[3], font=font, fill=fontcolor4)
# 释放画笔
del draw
# 存入session,用于做进一步的验证
request.session['verify'] = rand_str
# 内存文件操作
import io
buf = io.BytesIO()
# 将图片保存在内存中,文件类型为png
im.save(buf, 'png')
# 将内存中的图片数据返回给客户端,MIME类型为图片png
return HttpResponse(buf.getvalue(), 'image/png')
from django.shortcuts import render, redirect
def verifycodefile(request):
f = request.session.get("flag",True)
str = ""
if f == False:
str = "请重新输入!"
request.session.clear()
return render(request, 'myapp/verifycodefile.html', {"flag":str})
def verifycodecheck(request):
code1 = request.POST.get("verifycode").upper()
code2 = request.session["verify"].upper()
if code1 == code2:
return render(request, 'myapp/success.html')
else:
request.session["flag"] = False
return redirect('/verifycodefile/')
def upfile(request):
return render(request, 'myapp/upfile.html')
import os
from django.conf import settings
def savefile(request):
if request.method == "POST":
f = request.FILES["file"]
# 文件在服务器端的路径
filePath = os.path.join(settings.MEDIA_ROOT, f.name)
with open(filePath, 'wb') as fp:
for info in f.chunks():
fp.write(info)
return HttpResponse("上传成功。")
else:
return HttpResponse("上传失败。")
from .models import Students
from django.core.paginator import Paginator
def studentpage(request, pageid):
# 所有学生列表
allList = Students.stuObj2.all()
paginator = Paginator(allList, 3)
page = paginator.page(pageid)
# print(page)
return render(request, 'myapp/studentpage.html', {"students": page})
def ajaxstudents(request):
return render(request, 'myapp/ajaxstudents.html')
from django.http import JsonResponse
def studentsinfo(request):
stus = Students.stuObj2.all()
list = []
for stu in stus:
list.append([stu.sname, stu.sage])
return JsonResponse({"data": list})
def edit(request):
return render(request, 'myapp/edit.html')
from django.shortcuts import render, HttpResponse
from .models import Blog
def myblog(request):
blogs = Blog.objects.all()
return render(request, 'myapp/blog.html', context={'blogs': blogs})
然后是model数据模型文件
from django.db import models
# Create your models here.
from django.db import models
class GradesManager(models.Manager):
def get_querset(self):
return super(GradesManager,self).get_queryset().filter(isDelete=False)
class Grades(models.Model):
#graObj=models.Manager()
graObj2=GradesManager()
gname = models.CharField(max_length=20)
gdate = models.DateTimeField()
ggirlnum = models.IntegerField()
gboynum = models.IntegerField()
isDelete = models.BooleanField(default=False)
def __str__(self):
return self.gname
class Meta:
db_table='grades'
class StudentsManager(models.Manager):
def get_querset(self):
return super(StudentsManager,self).get_queryset().filter(isDelete=False)
def createStudent(self, name, age, gender, contend,
grade, lastT, createT, isD=False):
stu=self.model()
# print(type(grade))
stu.sname=name
stu.sage=age
stu.sgender=gender
stu.scontend=contend
stu.sgrade=grade
stu.lastTime=lastT
stu.createTime=createT
return stu
class Students(models.Model):
#stuObj=models.Manager()
stuObj2=StudentsManager()
sname = models.CharField(max_length=20)
sgender = models.BooleanField(default=True)
sage = models.IntegerField()
scontend = models.CharField(max_length=20)
lastTime = models.DateTimeField(auto_now=True)
createTime = models.DateTimeField(auto_now_add=True)
isDelete = models.BooleanField(default=False)
sgrade = models.ForeignKey("Grades", on_delete=models.CASCADE, )
def __str__(self):
return self.sname
class Meta:
db_table='students'
ordering=["id"]
@classmethod
def createStudent(cls, name, age, gender, contend,
grade, lastT, createT, isD=False):
stu = cls(sname=name,
sage=age,
sgender=gender,
scontend=contend,
sgrade=grade,
lastTime=lastT,
createTime=createT,
isDelete=isD)
return stu
from tinymce.models import HTMLField
class Text(models.Model):
str = HTMLField()
from django.db import models
from mdeditor.fields import MDTextField
class Blog(models.Model):
title = models.CharField(max_length=100)
content = MDTextField()
# class TempTables(models.Model):
# a=models.BooleanField(default=True)
然后是admin里面的文件,要注册你定义的类
from django.contrib import admin
# Register your models here.
from .models import Text
admin.site.register(Text)
from django.contrib import admin
from .models import Blog
# Register your models here.
@admin.register(Blog)
class BlogAdmin(admin.ModelAdmin):
list_display = ['title','content']
接下来是项目下面的主目录project/urls路由文件,和app下面的app/urls路由文件,这个是控制你的网页URL地址的
"""project URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/3.0/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.conf.urls import url,include
# urlpatterns = [
# # path('admin/', admin.site.urls),
# # path('^',include('myapp/urls'))
# # ]
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^', include('myapp.urls',namespace='app')),
]
===============================================================
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2020/7/12 14:31
# @Author : tiankongzhicheng
# @File : urls.py
# @Software: PyCharm
from django.conf.urls import url
from . import views
app_name='myapp'
urlpatterns=[
url(r'^meinv$',views.indexfunc),
url(r'^$',views.zhuye),
url(r'^students/$',views.students),
url(r'^grades/$',views.grades),
url(r'^addstudent/$',views.addstudent),
url(r'^addstudent2/$',views.addstudent2),
url(r'^student3/$',views.student3),
url(r'^stu/(\d+)$',views.stupage),
url(r'^studentsearch/$',views.studentsearch),
url(r'^grades1/$',views.grades1),
url(r'^get1/$',views.get1),
url(r'^get2/$',views.get2),
url(r'^showregist/$',views.showregist),
url(r'^showregist/regist/$',views.regist),
url(r'^redirect1/',views.redirect1),
url(r'^redirect2/',views.redirect2),
url(r'^main/$',views.main),
url(r'^login/$',views.login),
url(r'^showmain/$',views.showmain),
url(r'^quit/$',views.quit),
url(r'^students1/$',views.students1),
url(r'^good1/(\d+)/$',views.good1,name="good1"),
url(r'^good/(\d+)/(\d+)/$',views.good,name="good"),
url(r'^main1/$',views.main1),
url(r'^detail/$',views.detail),
url(r'^verifycode/$',views.verifycode),
url(r'^verifycodefile/$',views.verifycodefile),
url(r'^verifycodecheck/$',views.verifycodecheck),
url(r'^upfile/$',views.upfile),
url(r'^savefile/$',views.savefile),
url(r'^studentpage/(\d+)/$', views.studentpage),
url(r"^ajaxstudents/$", views.ajaxstudents),
url(r'^studentsinfo/$', views.studentsinfo),
url(r'^edit/$',views.edit),
url(r'^myblog/$',views.myblog),
#url(r'^images/$',views.list_all_img)
]
#这里定义了多少个url就代表有多少个网页
最后是settings文件
"""
Django settings for project project.
Generated by 'django-admin startproject' using Django 3.0.4.
For more information on this file, see
https://docs.djangoproject.com/en/3.0/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/3.0/ref/settings/
"""
import os
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.0/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'vpza$&f+9g53(8x$p0d+)m+8n8pe9aw7ag32$-#fc&k1c+8e!u'
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
ALLOWED_HOSTS = []
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myapp',
'tinymce',
'mdeditor',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'middleware.myapp.myMiddle.MyMiddle',
]
ROOT_URLCONF = 'project.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR,'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
WSGI_APPLICATION = 'project.wsgi.application'
# Database
# https://docs.djangoproject.com/en/3.0/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': "kaishen",
'USER': "root",
'PASSWORD': "qwer123456",
'HOST': "localhost",
'PORT': "3306"
}
}
# Password validation
# https://docs.djangoproject.com/en/3.0/ref/settings/#auth-password-validators
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
# Internationalization
# https://docs.djangoproject.com/en/3.0/topics/i18n/
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.0/howto/static-files/
STATIC_URL = '/static/'
STATICFILES_DIRS=(
os.path.join(BASE_DIR,'static'),
)
MEDIA_ROOT=os.path.join(BASE_DIR,r'static\upfile')
TINYMCE_DEFAULT_CONFIG = {
'width':600,
'height':400,
}
还有project/__init__文件,需要定义一下数据库
import pymysql
pymysql.version_info = (1, 4, 13, "final", 0) # 将版本信息改为1.4.13
pymysql.install_as_MySQLdb() # 驱动设置为pymysql
blog网页简单代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>myblog</title>
</head>
<body>
<div>
{% for blog in blogs %}
<h1>{{ blog.title }}</h1>>
<br>
<h2>{{ blog.content}}</h2>
{% endfor %}
</div>
</body>
</html>
学生信息简单网页
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>学生页面</title>
</head>
<body>
<h1>学生信息列表</h1>
<ul>
{%for student in students%}
<li>
<b>学生名称--简介--班级</b><br>
{{student.sname}}--{{student.scontend}}---{{student.sgrade}}
</li>
{%endfor%}
</ul>
</body>
</html>
好了以上就是整个django项目的源码