小福利,django搭建个人网站的源码公开(一)
大家好,我是天空之城,今天給大家?guī)?lái)小福利,django搭建個(gè)人網(wǎng)站的源碼公開(一)
**django框架的原理:**它采用的是MVT架構(gòu),m就是model數(shù)據(jù)模型,就是數(shù)據(jù)的結(jié)構(gòu)和字段,比如是個(gè)人博客數(shù)據(jù),就需要定義title和content數(shù)據(jù)類型,其他的表格之類的也需要定義相應(yīng)的數(shù)據(jù)類型;v就是views就是視圖也就是控制中心,所有網(wǎng)頁(yè)顯示的內(nèi)容都需要在這里用函數(shù)來(lái)定義,包括從數(shù)據(jù)庫(kù)中調(diào)用數(shù)據(jù);t就是template模塊,就是你要展示的具體網(wǎng)頁(yè)內(nèi)容html語(yǔ)言和css語(yǔ)言,這就是大體的框架,另外還要放一些static靜態(tài)文件,比如圖片,js文件之類。
當(dāng)你拿到一個(gè)django文件首先需要看一下數(shù)據(jù)庫(kù)配置,你先啟動(dòng)mysql數(shù)據(jù)庫(kù)并建立相應(yīng)的數(shù)據(jù)庫(kù)名稱,再進(jìn)行數(shù)據(jù)庫(kù)文件的遷移
首先是項(xiàng)目目錄截圖
其次是視圖views文件
這里每定義的一個(gè)函數(shù)就代表返回一個(gè)網(wǎng)頁(yè) from django.shortcuts import render# Create your views here.from django.http import HttpResponsedef 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,"我叫劉詩(shī)",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,Mindef 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,Qdef 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):# 取sessionusername = 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')# 存儲(chǔ)sessionrequest.session['name'] = usernamereturn redirect('/main/')from django.contrib.auth import logout def quit(request):# 清除sessionlogout(request) # 方法1,推薦# request.session.clear() # 方法2request.session.flush() # 方法3return 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# 引入隨機(jī)函數(shù)模塊import random# 定義變量,用于畫面的背景色,寬,高bgcolor = (random.randrange(20, 100), random.randrange(20, 100), random.randrange(20, 100))width = 100height = 50# 創(chuàng)建畫面對(duì)象im = Image.new('RGB', (width, height), bgcolor)# 創(chuàng)建畫面對(duì)象draw = ImageDraw.Draw(im)# 調(diào)用畫筆的point()函數(shù)繪制噪點(diǎn)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)# 定義驗(yàn)證碼的備選值str = '1234567890QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm'# 隨機(jī)選取4個(gè)值作為驗(yàn)證碼rand_str = ''for i in range(0, 4):rand_str += str[random.randrange(0, len(str))]# 構(gòu)造字體對(duì)象font = ImageFont.truetype(r'C:\Windows\Fonts\simfang.ttf', 40)# 構(gòu)造字體顏色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個(gè)字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,用于做進(jìn)一步的驗(yàn)證request.session['verify'] = rand_str# 內(nèi)存文件操作import iobuf = io.BytesIO()# 將圖片保存在內(nèi)存中,文件類型為pngim.save(buf, 'png')# 將內(nèi)存中的圖片數(shù)據(jù)返回給客戶端,MIME類型為圖片pngreturn 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 = "請(qǐng)重新輸入!"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"] = Falsereturn 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"]# 文件在服務(wù)器端的路徑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):# 所有學(xué)生列表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 JsonResponsedef 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 Blogdef myblog(request):blogs = Blog.objects.all()return render(request, 'myapp/blog.html', context={'blogs': blogs})然后是model數(shù)據(jù)模型文件
from django.db import models# Create your models here.from django.db import modelsclass 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.gnameclass 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=namestu.sage=agestu.sgender=genderstu.scontend=contendstu.sgrade=gradestu.lastTime=lastTstu.createTime=createTreturn stuclass 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.snameclass Meta:db_table='students'ordering=["id"]@classmethoddef 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 stufrom 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里面的文件,要注冊(cè)你定義的類
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']接下來(lái)是項(xiàng)目下面的主目錄project/urls路由文件,和app下面的app/urls路由文件,這個(gè)是控制你的網(wǎng)頁(yè)URL地址的
"""project URL ConfigurationThe `urlpatterns` list routes URLs to views. For more information please see:https://docs.djangoproject.com/en/3.0/topics/http/urls/ Examples: Function views1. Add an import: from my_app import views2. Add a URL to urlpatterns: path('', views.home, name='home') Class-based views1. Add an import: from other_app.views import Home2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') Including another URLconf1. Import the include() function: from django.urls import include, path2. 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: PyCharmfrom django.conf.urls import url from . import viewsapp_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) ]#這里定義了多少個(gè)url就代表有多少個(gè)網(wǎng)頁(yè)最后是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 = TrueALLOWED_HOSTS = []# Application definitionINSTALLED_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/#databasesDATABASES = {'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-validatorsAUTH_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 = TrueUSE_L10N = TrueUSE_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__文件,需要定義一下數(shù)據(jù)庫(kù)
import pymysql pymysql.version_info = (1, 4, 13, "final", 0) # 將版本信息改為1.4.13 pymysql.install_as_MySQLdb() # 驅(qū)動(dòng)設(shè)置為pymysqlblog網(wǎng)頁(yè)簡(jiǎn)單代碼
<!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>學(xué)生信息簡(jiǎn)單網(wǎng)頁(yè)
<!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>學(xué)生頁(yè)面</title> </head> <body><h1>學(xué)生信息列表</h1><ul>{%for student in students%}<li><b>學(xué)生名稱--簡(jiǎn)介--班級(jí)</b><br>{{student.sname}}--{{student.scontend}}---{{student.sgrade}}</li>{%endfor%}</ul> </body> </html>好了以上就是整個(gè)django項(xiàng)目的源碼
總結(jié)
以上是生活随笔為你收集整理的小福利,django搭建个人网站的源码公开(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 反光贴做E-mark认证步骤复杂吗?
- 下一篇: 清华大学计算机教授 刘华平,CAAI会员