小福利,django搭建个人网站的源码公开(一)

大家好,我是天空之城,今天给大家带来小福利,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项目的源码

  • 7
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值