溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

python+django+mysql開發(fā)實(shí)例分析

發(fā)布時間:2022-01-11 09:09:36 來源:億速云 閱讀:220 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容主要講解“python+django+mysql開發(fā)實(shí)例分析”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“python+django+mysql開發(fā)實(shí)例分析”吧!

開發(fā)工具:pycharm

環(huán)境:python3.7.4(例子中用的3.6)
下載安裝pycharm
分為社區(qū)版和專業(yè)版,一個免費(fèi)一個收費(fèi)
Pycharm2021破解版下載
下載安裝python
安裝好開發(fā)工具和python環(huán)境后,打開pycharm,配置python環(huán)境以及升級pip,由于低版本pip影響新版本組件的安裝因此建議升級到最新版本的pip。

一、安裝配置環(huán)境

python+django+mysql開發(fā)實(shí)例分析

python+django+mysql開發(fā)實(shí)例分析

配置好python環(huán)境后

python+django+mysql開發(fā)實(shí)例分析

python+django+mysql開發(fā)實(shí)例分析

python+django+mysql開發(fā)實(shí)例分析

安裝中的狀態(tài)

python+django+mysql開發(fā)實(shí)例分析

安裝成功提示如下

python+django+mysql開發(fā)實(shí)例分析

成功后等待一會工具處理插件,處理成功后就可以用新版本的pip了

python+django+mysql開發(fā)實(shí)例分析

同樣的方法安裝django,pymysql
需要注意的是,各個插件版本的依賴關(guān)系,安裝你的python版本支持的django和pymysql

二、創(chuàng)建django項(xiàng)目

右鍵你的項(xiàng)目,打開終端

python+django+mysql開發(fā)實(shí)例分析

python+django+mysql開發(fā)實(shí)例分析

輸入如下內(nèi)容

#創(chuàng)建一個項(xiàng)目,名稱為blogs
django-admin.exe startproject blogs 
#進(jìn)入項(xiàng)目目錄
cd blogs
#創(chuàng)建一個應(yīng)用,注應(yīng)用名稱不能與項(xiàng)目名稱相同
python manage.py startapp blog

Pycharm 設(shè)置路徑

python+django+mysql開發(fā)實(shí)例分析

兩個都勾選上,然后右鍵目錄,加入目錄的路徑,引用模塊的時候就不會報錯

python+django+mysql開發(fā)實(shí)例分析

項(xiàng)目創(chuàng)建好后,目錄結(jié)構(gòu)如下

python+django+mysql開發(fā)實(shí)例分析

三、開發(fā)

1.添加url路由

python+django+mysql開發(fā)實(shí)例分析

在urls.py文件中,編寫如下代碼:

from django.contrib import admin
from django.urls import path
from blog.views import *

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', indexes),
    path('blog/', index),
    path('start/', start_scrapy),
]

2.Settings.py中添加應(yīng)用配置

import pymysql  #引用mysql驅(qū)動
pymysql.install_as_MySQLdb()

ALLOWED_HOSTS = ["*"]#允許全部主機(jī)訪問


# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog',#添加創(chuàng)建的應(yīng)用模塊
    'bootstrap3',#如果需要使用bootstrap框架,需要安裝django-bootstrap3插件
]

DATABASES = {#配置數(shù)據(jù)庫鏈接屬性
    # 'default': {
    #     'ENGINE': 'django.db.backends.sqlite3',
    #     'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    # }
    'default': {
        'ENGINE': 'django.db.backends.mysql',  # 或者使用 mysql.connector.django
        'NAME': 'blog',
        'USER': 'root',
        'PASSWORD': '@bjive321',
        'HOST': '59.110.138.8',
        'PORT': '3306',
    }
}

3.編寫models

python+django+mysql開發(fā)實(shí)例分析

from django.db import models

# Create your models here.

class Blog(models.Model):
    title = models.CharField(u'標(biāo)題', max_length=64)
    content = models.TextField(u'內(nèi)容', default="")
    update_time = models.DateTimeField(u'更新時間', auto_now=True)
    pub_date = models.DateField(u'發(fā)布時間')
    author = models.CharField(u'作者', max_length=64, default=None)

    # update_time.editable = True
    # 列表中顯示的內(nèi)容
    def __str__(self):
        return "標(biāo)題:{},字?jǐn)?shù):{},概要:{}".format(self.title, len(self.content), self.content[:18])


class Spider(models.Model):
    #自定義主鍵
    # id = models.CharField(primary_key=True)
    date = models.DateField(u'日期')
    open = models.DecimalField(u'開盤價', max_digits=8, decimal_places=2)
    close = models.DecimalField(u'收盤價', max_digits=8, decimal_places=2)
    height = models.DecimalField(u'最高價', max_digits=8, decimal_places=2)
    low = models.DecimalField(u'最低價', max_digits=8, decimal_places=2)
    updownd = models.DecimalField(u'漲跌幅度', max_digits=8, decimal_places=2)
    turnrate = models.DecimalField(u'換手率', max_digits=8, decimal_places=2)
    count = models.DecimalField(u'總價', max_digits=8, decimal_places=2)

4.配置admin.py后臺管理功能擴(kuò)展,將開發(fā)的模塊注冊到admin后臺管理中,可以自動賦予增刪改查能力。

python+django+mysql開發(fā)實(shí)例分析

我增加了兩個功能,一個博客管理,一個爬蟲管理(對爬取的內(nèi)容進(jìn)行修改查看刪除等操作)

from django.contrib import admin
from blog.models import Blog, Spider


class ContactAdmin(admin.ModelAdmin):
    # 增加內(nèi)容時,將登陸人的賬號存入指定的字段中,models中要預(yù)留這個字段,這里是author
    def save_model(self, request, obj, form, change):
        if change:  # 更新操作返回true
            obj.save()
        else:  # 否則是新增
            obj.author = request.user
            obj.save()

    # 設(shè)置作者字段只讀
    readonly_fields = ("author",)

    # 過濾,只能查看操作登陸人自己創(chuàng)建的內(nèi)容
    def get_queryset(self, request):
        qs = super(ContactAdmin, self).get_queryset(request)
        if request.user.is_superuser:
            return qs
        return qs.filter(author=request.user)

    # listdisplay設(shè)置要顯示在列表中的字段(id字段是Django模型的默認(rèn)主鍵)
    list_display = ('title', 'update_time', 'pub_date', 'author')  # list
    search_fields = ('title', 'content',)  # 如果只有一個值,結(jié)尾必須有一個逗號,證明是list或元組
    # list_per_page設(shè)置每頁顯示多少條記錄,默認(rèn)是100條
    list_per_page = 5
    # ordering設(shè)置默認(rèn)排序字段,負(fù)號表示降序排序
    ordering = ('-update_time',)
    # list_editable 設(shè)置默認(rèn)可編輯字段,第一個字段不允許編輯
    list_editable = ['pub_date', ]
    # fk_fields 設(shè)置顯示外鍵字段
    # fk_fields = ('machine_room_id',)
    date_hierarchy = 'pub_date'


class SpiderAdmin(admin.ModelAdmin):
    list_display = ('date', 'open', 'close', 'height', 'low', 'updownd', 'turnrate', 'count')  # list
    date_hierarchy = 'date'
    # list_per_page設(shè)置每頁顯示多少條記錄,默認(rèn)是100條
    list_per_page = 20


# Register your models here.
admin.site.register(Blog, ContactAdmin)
admin.site.register(Spider, SpiderAdmin)
# 設(shè)置登陸窗口的標(biāo)題
admin.site.site_header = '屌炸天系統(tǒng)'
# 設(shè)置頁簽標(biāo)題
admin.site.site_title = '牛逼轟轟'

4.初始化admin以及創(chuàng)建blog和spider表

$ python manage.py migrate   # 創(chuàng)建表結(jié)構(gòu),默認(rèn)創(chuàng)建admin模塊表
$ python manage.py makemigrations blog  # 讓 Django 知道我們在我們的模型有一些變更
$ python manage.py migrate blog  # 創(chuàng)建自定義表結(jié)構(gòu)
$ python manage.py createsuperuser #創(chuàng)建后臺管理員賬號

5.編寫views.py

import base64
from io import BytesIO

import requests
from django.http import JsonResponse
from django.shortcuts import render
import markdown
# Create your views here.

import blog.models as m
import pandas as pd
import matplotlib
from matplotlib import pyplot as plt


# 查詢
# models.UserInfo.objects.all()
# models.UserInfo.objects.all().values('user')    #只取user列
# models.UserInfo.objects.all().values_list('id','user')    #取出id和user列,并生成一個列表
# models.UserInfo.objects.get(id=1)
# models.UserInfo.objects.get(user='yangmv')

# 增
# models.UserInfo.objects.create(user='yangmv',pwd='123456')
# 或者
# obj = models.UserInfo(user='yangmv',pwd='123456')
# obj.save()
# 或者
# dic = {'user':'yangmv','pwd':'123456'}
# models.UserInfo.objects.create(**dic)

# 刪
# models.UserInfo.objects.filter(id=1).delete()

# 改
# models.UserInfo.objects.filter(user='yangmv').update(pwd='520')
# 或者
# obj = models.UserInfo.objects.get(user='yangmv')
# obj.pwd = '520'
# obj.save()
def index(request):
    i = request.GET.get('id')
    # postdata = request.POST['id']
    blog = m.Blog.objects.get(id=i)
    blog_content = markdown.markdown(blog.content)
    spider = m.Spider.objects.all().values()
    plot_data = showMatplot(pd.DataFrame(spider))
    imb = base64.b64encode(plot_data)  # 對plot_data進(jìn)行編碼
    ims = imb.decode()
    imd = "data:image/png;base64," + ims
    return render(request, "blog.html", {'blog': blog, 'blog_content': blog_content, 'img': imd})


def indexes(request):
    blogs = m.Blog.objects.all()
    return render(request, "blogs.html", {'blogs': blogs})

#圖標(biāo)嵌入django頁面
def showMatplot(df):
    plt.figure(figsize=(12, 10))  # 設(shè)置圖像大小
    plt.subplot(212)  # 布局兩行1列的第二個
    col = ['date', 'open', 'close', 'height', 'low', 'updownd', 'count']
    df = df.astype(
        {'open': 'float', 'close': 'float', 'height': 'float', 'low': 'float', 'updownd': 'float', 'count': 'float'})
    df = pd.DataFrame(df, columns=col)
    # print(df)
    # print("*" * 40)
    # # corr只能對數(shù)值型數(shù)據(jù)進(jìn)行相關(guān)度計(jì)算
    # print(df.corr())
    x = pd.to_datetime(df['date'])
    y1 = df["open"]
    y2 = df["close"]
    y3 = df["height"]
    y4 = df["low"]

    plt.plot(x, y1, label='open', linestyle='-', c='black', linewidth=1)
    plt.plot(x, y2, label='close', linestyle='--', c='r', linewidth=1)
    plt.plot(x, y3, label='height', linestyle=':', c='g', linewidth=1)
    plt.plot(x, y4, label='low', linestyle='-.', c='b', linewidth=1)
    plt.legend()
    plt.subplot(211)  # 布局兩行一列第一個
    df1 = df.sort_values(by='date', ascending=True)
    # df1 = df1.iloc[30:]
    col = ["date", "close"]
    close = pd.DataFrame(df1, columns=col)

    data = cal_macd_system(close, 12, 26, 9)
    x = pd.to_datetime(data['date'])
    # y = pd.to_numeric(data["close"])
    y1 = data["macd"]
    # plt.plot(x, y, label="k")
    plt.plot(x, y1, label="macd")
    plt.title("某公司股票", fontproperties=zhfont1, fontsize=15)
    plt.legend()
    buffer = BytesIO()
    plt.savefig(buffer)
    plot_data = buffer.getvalue()
    return plot_data

#下載字體放到項(xiàng)目目錄中,解決圖標(biāo)中文顯示
zhfont1 = matplotlib.font_manager.FontProperties(fname="FZSTK.TTF")

#macd指標(biāo)算法
def cal_macd_system(data, short_, long_, m):
    '''
    data是包含高開低收成交量的標(biāo)準(zhǔn)dataframe
    short_,long_,m分別是macd的三個參數(shù)
    返回值是包含原始數(shù)據(jù)和diff,dea,macd三個列的dataframe
    '''
    data['diff'] = data['close'].ewm(adjust=False, alpha=2 / (short_ + 1), ignore_na=True).mean() - \
                   data['close'].ewm(adjust=False, alpha=2 / (long_ + 1), ignore_na=True).mean()
    data['dea'] = data['diff'].ewm(adjust=False, alpha=2 / (m + 1), ignore_na=True).mean()
    data['macd'] = 2 * (data['diff'] - data['dea'])
    return data

#繪制macd指標(biāo)曲線
def macdview(df):
    df1 = df.sort_values(by='date', ascending=True)
    # df1 = df1.iloc[30:]
    col = ["date", "close"]
    close = pd.DataFrame(df1, columns=col)

    data = cal_macd_system(close, 12, 26, 9)
    x = pd.to_datetime(data['date'])
    # y = pd.to_numeric(data["close"])
    y1 = data["macd"]
    # plt.plot(x, y, label="k")
    plt.plot(x, y1, label="macd")
    plt.title("某公司股票", fontproperties=zhfont1, fontsize=15)
    # plt.legend()
    buffer = BytesIO()
    buffer.flush()
    plt.savefig(buffer)
    plot_data = buffer.getvalue()
    buffer.close()
    return plot_data

#在線啟動爬蟲
def start_scrapy(request):
    # 獲取頁面?zhèn)鲄?,要區(qū)分請求類型是POST還是GET,不同請求用不同的方法接收參數(shù)
    year = request.POST.get('year')
    jd = request.POST.get('jd')
    url = 'http://127.0.0.1:6800/schedule.json'
    # spider是執(zhí)行scrapy list返回的名稱,參數(shù)問題:除了內(nèi)置key的參數(shù)外如project,spider等,其他參數(shù)均由爬蟲初始化函數(shù)的kwargs接收
    # 同時jobid也有kwargs接收,**kwargs是接收字典型的參數(shù),帶有key值的
    data = {'project': 'pachong', 'spider': 'pachong_spider', 'year': year, 'jd': jd}
    print(requests.post(url=url, data=data))
    return JsonResponse({'result': 'ok'})

在創(chuàng)建的應(yīng)用下,創(chuàng)建2個文件夾,分別為static和templates,名字必須為這個,static是放靜態(tài)資源css,js,img等,templates存放模板頁面文件html等
如果想自定義路徑需要在settings.py配置你的路徑到環(huán)境中(具體配置請百度)

python+django+mysql開發(fā)實(shí)例分析

python+django+mysql開發(fā)實(shí)例分析

5.在終端中運(yùn)行服務(wù):

$python manage.py runserver 8080(不指定端口號的話默認(rèn)8000)

以上就是我第一個入門級django項(xiàng)目的開發(fā)過程,以此記錄,激勵后期學(xué)習(xí)!后面會整理爬蟲學(xué)習(xí)的代碼也一并記錄下來。

項(xiàng)目源代碼:pystudy_jb51.rar

到此這篇關(guān)于python+django+mysql開發(fā)實(shí)戰(zhàn)(附demo)的文章就介紹到這了,更多相關(guān)python django mysql開發(fā)內(nèi)容請搜索億速云以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持億速云!

到此,相信大家對“python+django+mysql開發(fā)實(shí)例分析”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI