Python -使用django開發框架已經使用中遇到的問題

使用中:

  1. django搭建虛擬環境
pip install virtualenv
virtualenv testProject

得到如圖:
在這裏插入圖片描述
激活文件在Script文件夾中:activate.bat
在這裏插入圖片描述
我搭建django的框架所在環境爲windows,所有命令都在cmd中執行。
在這裏插入圖片描述
激活虛擬環境直接在命令行中運行.bat文件,激活成功的標誌是你的當前目錄下出現了你剛纔創建的虛擬環境的名稱。

2.安裝django

pip install django
  1. 創建項目
django-admin startproject  projectname

在這裏插入圖片描述
VOTE中的內容
在這裏插入圖片描述
4. 修改配置

LANGUAGE_CODE = 'zh-hans'   #設置語言爲中文
TIME_ZONE = 'Asia/Chongqing'  #設置時區
  1. 運行框架:
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 ‘****’
在這裏插入圖片描述把項目下這個刪掉即可,阻礙了它生成文件了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章