使用中:
- django搭建虛擬環境
pip install virtualenv
virtualenv testProject
得到如圖:
激活文件在Script文件夾中:activate.bat
我搭建django的框架所在環境爲windows,所有命令都在cmd中執行。
激活虛擬環境直接在命令行中運行.bat文件,激活成功的標誌是你的當前目錄下出現了你剛纔創建的虛擬環境的名稱。
2.安裝django
pip install django
- 創建項目
django-admin startproject projectname
VOTE中的內容
4. 修改配置
LANGUAGE_CODE = 'zh-hans' #設置語言爲中文
TIME_ZONE = 'Asia/Chongqing' #設置時區
- 運行框架:
python manage.py runserver #進入包含manage.py 的文件夾運行
在瀏覽器中輸入http://localhost:8000/ 默認端口號爲8000,可以自行選擇端口號,如何更改請百度。
5.讓我動手做一個小項目吧
(venv) E:\VOTE>python manage.py startapp VoteSystem #創建一個投票系統
VoteSystem 文件夾內容
搭建數據庫:
由於我比較熟悉mysql, 所以選擇了mysql數據庫
pip install pymysql #安裝python操作mysql所需要的庫
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'VoteSystem', #添加項目
]
#配置數據庫
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'lujiamin',
'HOST': '127.0.0.1',
'PORT': 3306,
'USER': 'root',
'PASSWORD': '12345678',
}
}
報錯:
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
Did you install mysqlclient?
解決辦法:
#在項目根目錄的文件__init__.py中加入:
import pymysql
pymysql.install_as_MySQLdb()
# 完成數據庫遷移
python manage.py makemigrations VoteSystem
python manage.py migrate
後面再遇見的問題在這篇博文裏面
https://blog.csdn.net/gymaisyl/article/details/84646830
在連接數據庫情況下,完成數據遷移後,你的數據庫中將會多出這些表:
#改下setting.py
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'), ]
STATIC_URL = '/static/'
# model.py
from django.db import models
class Subject(models.Model):
# 學科
no = models.IntegerField(primary_key=True, verbose_name='編號')
name = models.CharField(max_length=20, verbose_name='名稱')
intro = models.CharField(max_length=500, default='', verbose_name='介紹')
create_date = models.DateField(null=True, verbose_name='成立日期')
is_hot = models.BooleanField(default=False,verbose_name='是否熱門')
def __str__(self):
return self.name
class Meta:
db_table = 'tb_subject'
verbose_name = '學科'
verbose_name_plural = '學科'
class Teacher(models.Model):
# 老師
no = models.IntegerField(primary_key=True, verbose_name='編號')
name = models.CharField(max_length=20, verbose_name='姓名')
detail = models.CharField(max_length=1023, default='', blank=True, verbose_name='詳情')
photo = models.CharField(max_length=1023, default='', verbose_name='照片')
good_count = models.IntegerField(default=0, verbose_name='好評數')
bad_count = models.IntegerField(default=0, verbose_name='差評數')
subject = models.ForeignKey(to=Subject, on_delete=models.PROTECT, db_column='sno', verbose_name='所屬學科')
class Meta:
db_table = 'tb_teacher'
verbose_name = '老師'
verbose_name_plural = '老師'
#admin.py
from django.contrib import admin
from VoteSystem.models import Subject, Teacher
class SubjectAdmin(admin.ModelAdmin):
list_display = ('no', 'name', 'create_date', 'is_hot')
ordering = ('no',)
class TeacherAdmin(admin.ModelAdmin):
list_display = ('no', 'name', 'detail', 'good_count', 'bad_count', 'subject')
ordering = ('subject', 'no')
admin.site.register(Subject, SubjectAdmin)
admin.site.register(Teacher, TeacherAdmin)
#urls.py
from django.contrib import admin
from django.urls import path
from VoteSystem import views
urlpatterns = [
path('', views.show_subjects),
path('teachers/', views.show_teachers),
path('praise/', views.praise_or_criticize),
path('criticize/', views.praise_or_criticize),
path('admin/', admin.site.urls),
]
#views.py
from django.shortcuts import render, redirect
from VoteSystem.models import Subject,Teacher
def show_subjects(request):
"""查看所有學科"""
subjects = Subject.objects.all()
return render(request, 'subject.html', {'subjects': subjects})
def show_teachers(request):
"""顯示指定學科的老師"""
try:
sno = int(request.GET['sno'])
subject = Subject.objects.get(no=sno)
teachers = subject.teacher_set.all()
return render(request, 'teachers.html', {'subject': subject, 'teachers': teachers})
except (KeyError, ValueError, Subject.DoesNotExist):
return redirect('/')
def praise_or_criticize():
try:
tno = int(request,GET['tno'])
teacher = Teacher.objects.get(no = tno)
if request.path.startswith('/praise'):
teacher.good_count+=1
else:
teacher.bad_count+=1
teacher.save()
data = {'code':200, 'hint':'操作成功!'}
except(KeyError,ValueError,Teacher.DoseNotExist):
data ={'code':404, 'hint':'操作失敗'}
return JsonResponse(data)
在項目文件夾中建立一個templates文件夾,用於存放靜態模板
修改setting.py中的 DIRS,指定前端模板頁面
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',
],
},
},
]
模板頁 teachers.html
<!DOCTYPE html>
{% load static %}
<html lang="en">
<head>
<meta charset="UTF-8">
<title>老師</title>
<style>/* 此處略去了層疊樣式表的選擇器 */</style>
</head>
<body>
<h1>{{ subject.name }}學科老師信息</h1>
<hr>
{% if teachers %}
{% for teacher in teachers %}
<div>
<div>
<img src="{% static teacher.photo %}" alt="">
</div>
<div>
<h3>{{ teacher.name }}</h3>
<p>{{ teacher.detail }}</p>
<p class="comment">
<a href="">好評</a>
(<span>{{ teacher.good_count }}</span>)
<a href="">差評</a>
(<span>{{ teacher.bad_count }}</span>)
</p>
</div>
</div>
{% endfor %}
{% else %}
<h3>暫時沒有該學科的老師信息</h3>
{% endif %}
<p>
<a href="/">返回首頁</a>
</p>
</body>
</html>
subject.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>所有學科信息</title>
<style>/* 此處略去了層疊樣式表的選擇器 */</style>
</head>
<body>
<h1>所有學科</h1>
<hr>
{% for subject in subjects %}
<div>
<h3>
<a href="/teachers/?sno={{ subject.no }}">{{ subject.name }}</a>
{% if subject.is_hot %}
<img src="/static/images/hot.png" width="32" alt="">
{% endif %}
</h3>
<p>{{ subject.intro }}</p>
</div>
{% endfor %}
</body>
</html>
差點忘了告訴你了,你可以用這個命令,創建個賬戶並登陸djano管理平臺
python manage.py createsuperuser
localhost:8000/admin
登陸後你就可以進行增刪改查 的操作了。
第二次操作時遇見的問題:
問題一:提示mysql語法有問題,其實是版本不兼容
問題2:
資料地址:https://docs.djangoproject.com/en/3.0/ref/databases/#mysql-sql-mode
按照他給出的警示,加個這個就好
`
'OPTIONS': {
#'charset': 'utf8mb4',
#'autocommit': True,
'init_command': 'SET sql_mode="STRICT_TRANS_TABLES"',
}`
問題3:No changes detected in app ‘****’
把項目下這個刪掉即可,阻礙了它生成文件了