Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统

Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统

大家好,又见面了,我是全栈君。

1 准备工作

  1.1 环境搭建

    1.1.1 安装python3.6

  python安装官网

    1.1.2 安装django2.2

pip install django(==2.2.0)  //不加版本默认安装最新

    1.1.3 安装pycharm(社区版,官网下载安装即可)

在安装完成后要配置好需要的第三方库:(pip下载,推荐在pycharm下也配置虚拟环境)

Django2.2

连接mysql需要的库:PyMySQL, mysql, mysqlclinet

验证码用到的库:django-simple-captcha(只需在虚拟环境下配置)

(由于下载库较多,忘记用到的库,下附截图)

Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统

 1.1.4 安装数据库,我使用的是MySQL,推荐安装界面管理文件(我使用的是MySQLWorkbench)

数据库配置,settings.py文件

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME':'cet',                         #数据库名字
        'USER':'root',                        #登陆数据库的用户名
        'PASSWORD':'123',                     #登陆数据库的密码
        'HOST':'localhost',                   #数据库的ip地址
        'PORT':'3306',                        #ip地址的端口号,默认(3306)
    }
}

__init__.py里面导入pymysql

import pymysql


pymysql.install_as_MySQLdb()

1.2 创建django项目及app

    1.2.1 创建指令

django-admin startproject project_name        #创建项目
python manage.py startapp app_name            #创建app(可能会报错)
#上面创建app失败用下面这个指令
django-admin startapp app_name

 1.2.2 注册app

INSTALLED_APPS = [
    'django.contrib.admin',            
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'login',                  #登录注册
    'captcha',                #验证码
    'home',                   #报名主页
]

1.4 更改时区和语言

settings.py文件中,将默认改为亚洲/上海和中文

LANGUAGE_CODE = 'zh-hans'
 
TIME_ZONE = 'Asia/Shanghai'
 
USE_I18N = True
 
USE_L10N = True
 
USE_TZ = False

1.5 数据库迁移

更改models.py后,要将更改同步到数据库之中,这时就要用到数据库迁移指令(若迁移失败:no changes问题)。

python manage.py makemigrations
 
python manage.py migrate

1.6 创建超级管理员

命令行冲使用指令创建管理员账号用于使用django自带的框架。

python manage.py createsuperuser

1.7 运行准备

添加端口号:

Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统

2 注册登录模块

(我将其放在了app名为login里面)

  2.1 数据库模型设计

  特殊参数说明:verbose_name——用于修改django框架各表成员的名字(相当于副名,只用于显示),其他可以从文章开头推荐的博客了解。

#login/models.py
 
from django.db import models
 
# Create your models here.
 
class User(models.Model):
    '''用户表'''
    gender = (
        ('male', '男'),
        ('female', '女'),
    )
    name = models.CharField(verbose_name="用户名", max_length=128, unique=True)  # unique表示唯一
    password = models.CharField(verbose_name="密码", max_length=256)
    email = models.EmailField(verbose_name="邮箱", unique=True)
    sex = models.CharField(verbose_name="性别", max_length=32, choices=gender, default='男')
    c_time = models.DateTimeField(auto_now_add=True)
 
    def __str__(self):
        return self.name
 
    #用于将django自带管理员端汉化
    class Meta:
        ordering = ['c_time']
        verbose_name = '用户'
        verbose_name_plural = '用户'

2.2 在admin中注册模型

#login/admin.py
 
from django.contrib import admin
 
# Register your models here.
 
from . import models
 
admin.site.register(models.User)

2.3 创建表单

在我们创建数据库用户表后,采用表单验证前端的数据并进行存储到数据库中。

#login/forms.py
 
from django import forms
from captcha.fields import CaptchaField
 
 
class user_entry(forms.Form):
    user_name = forms.CharField(label="用户名", max_length=128, widget=forms.TextInput(attrs={'class': 'form-control'}))
    user_true_name = forms.CharField(label="真实姓名", max_length=128,widget=forms.TextInput(attrs={'class': 'form-control'}))
    user_id = forms.CharField(label="身份证号", max_length=18, widget=forms.TextInput(attrs={'class': 'form-control'}))
    email = forms.EmailField(label="邮箱地址", widget=forms.EmailInput(attrs={'class': 'form-control'}))
    exam_point = forms.CharField(label="考点", max_length=128, widget=forms.TextInput(attrs={'class': 'form-control'}))
 
class user_datas(forms.Form):
    email = forms.EmailField(label="邮箱地址", widget=forms.EmailInput(attrs={'class': 'form-control'}))
    user_name = forms.CharField(label="用户名", max_length=128, widget=forms.TextInput(attrs={'class': 'form-control'}))
    user_true_name = forms.CharField(label="真实姓名", max_length=128, widget=forms.TextInput(attrs={'class': 'form-control'}))
    user_id = forms.CharField(label="身份证号", max_length=18, widget=forms.TextInput(attrs={'class': 'form-control'}))
    # user_img =
    user_school = forms.CharField(label="所在学校", max_length=128, widget=forms.TextInput(attrs={'class': 'form-control'}))
    # user_f_score = forms.CharField(label="四级成绩", max_length=10, widget=forms.TextInput(attrs={'class': 'form-control'}))
    # user_s_score = forms.CharField(label="六级成绩", max_length=10, widget=forms.TextInput(attrs={'class': 'form-control'}))

2.4 路由及视图设计

    2.4.1 路由设计

由于登陆注册使用的路径不多,就将其全放在项目目录下的urls.py文件,当然也可以采用项目和app相结合。

#项目名/urls.py
from django.contrib import admin
from django.urls import path,include
from login import views
 
urlpatterns = [
    path('', views.index),              #修改端口默认主页
    path('admin/', admin.site.urls),    #管理员端
 
    #登录注册
    path('index/', views.index),
    path('check/', views.check),
    path('login/', views.login),
    path('register/', views.register),
    path('logout/', views.logout),
 
    #使用验证码
    path('captcha', include('captcha.urls')),
 
    #报名app路由
    path('homepage/',include('home.urls')),
]

2.4.2 视图设计

#login/views.py
 
from django.shortcuts import render, redirect
from . import models
from .forms import UserForm,RegisterForm
from home.models import user_data
# Create your views here.
 
def check(request):
    pass
    return render(request, 'login/hello.html')
 
def index(request):
    pass
    return render(request, 'login/index.html')
 
 
#加入sesson
def login(request):
    #不允许重复登录
    if request.session.get('is_login', None):
        return redirect('/index')
 
    if request.method == "POST":
        login_form = UserForm(request.POST)
        message = "请检查填写的内容!"
        if login_form.is_valid():
            username = login_form.cleaned_data['username']
            password = login_form.cleaned_data['password']
            try:
                user = models.User.objects.get(name=username)
                if user.password == password:
                    #往session字典内写入用户状态和数据
                    request.session['is_login'] = True
                    request.session['user_id'] = user.id
                    request.session['user_name'] = user.name
                    return redirect('/index/')
                else:
                    message = "密码不正确!"
            except:
                message = "用户不存在!"
        return render(request, 'login/login.html', locals())
 
    login_form = UserForm()
    return render(request, 'login/login.html', locals())
 
 
def logout(request):
    if not request.session.get('is_login', None):
        # 如果本来就未登录,也就没有登出一说
        return redirect("/index/")
    request.session.flush()
    # 或者使用下面的方法
    # del request.session['is_login']
    # del request.session['user_id']
    # del request.session['user_name']
    return redirect("/index/")
 
 
 
def register(request):
    if request.session.get('is_login', None):
        # 登录状态不允许注册。
        return redirect("/index/")
    if request.method == "POST":
        register_form = RegisterForm(request.POST)
        message = "请检查填写的内容!"
        if register_form.is_valid():  # 获取数据
            username = register_form.cleaned_data['username']
            password1 = register_form.cleaned_data['password1']
            password2 = register_form.cleaned_data['password2']
            email = register_form.cleaned_data['email']
            sex = register_form.cleaned_data['sex']
            if password1 != password2:  # 判断两次密码是否相同
                message = "两次输入的密码不同!"
                return render(request, 'login/register.html', locals())
            else:
                same_name_user = models.User.objects.filter(name=username)
                if same_name_user:  # 用户名唯一
                    message = '用户已经存在,请重新选择用户名!'
                    return render(request, 'login/register.html', locals())
                same_email_user = models.User.objects.filter(email=email)
                if same_email_user:  # 邮箱地址唯一
                    message = '该邮箱地址已被注册,请使用别的邮箱!'
                    return render(request, 'login/register.html', locals())
                message = "注册成功!"
                # 当一切都OK的情况下,创建新用户
                # 创建用户信息//有问题:放在创建用户表后面会出现DJANGO pymysql.err.IntegrityError:
                # (1062, "Duplicate entry '' for key 'user_name'")
                new_user_data = user_data.objects.create()
                new_user_data.user_name = username
                new_user_data.user_true_name = '无'
                new_user_data.user_id = '无'
                new_user_data.user_school = '无'
                # new_user_data.user_f_score = 425
                # new_user_data.user_s_score = 0
                new_user_data.save()
 
                #创建用户表
                new_user = models.User.objects.create()
                new_user.name = username
                new_user.password = password1
                new_user.email = email
                new_user.sex = sex
                new_user.save()
 
                return redirect('/login/')  # 自动跳转到登录页面
    register_form = RegisterForm()
    return render(request, 'login/register.html', locals())

3 个人信息及报名管理

(我将其放在了app名为home里面)

  3.1 数据库模型设计

#home/models.py
 
from django.db import models
 
# Create your models here.
 
class exam_entry_table(models.Model):
    #考点信息表
    exam_id = models.CharField(verbose_name="考试编号",max_length=10)
    exam_type = models.CharField(verbose_name="考试类别",max_length=128)
    exam_point = models.CharField(verbose_name="考点",max_length=128)
    exam_time = models.CharField(verbose_name="考试时间",max_length=128)
    number = models.IntegerField(verbose_name="容量")
    entry_number = models.IntegerField(verbose_name="已报名数量",default=0)
 
    def __str__(self):
        return self.exam_point
 
    class Meta:
        # ordering = ['c_time']
        verbose_name = '考点'
        verbose_name_plural = '考点信息表'
 
 
 
class user_entry_table(models.Model):
    #用户考试信息表
    email = models.EmailField(verbose_name="邮箱")
    exam_id = models.CharField(verbose_name="考试编号",max_length=10)
    exam_point = models.CharField(verbose_name="考点",max_length=128)
 
 
    def __str__(self):
        return self.email
    class Meta:
        # ordering = ['c_time']
        verbose_name = '用户考试信息'
        verbose_name_plural = '用户考试信息表'
 
class user_data(models.Model):
    #用户信息表
    user_name = models.CharField(verbose_name="用户名",max_length=128, unique=True)
    user_true_name = models.CharField(verbose_name="真实姓名",max_length=128, null=True)
    user_id = models.CharField(verbose_name="身份证号",max_length=18, null=True)
    # user_img =
    user_school = models.CharField(verbose_name="在读学校",max_length=128)
    user_f_score = models.IntegerField(verbose_name="四级成绩", default=0)
    user_s_score = models.IntegerField(verbose_name="六级成绩", default=0)
 
    def __str__(self):
        return self.user_name
 
    class Meta:
        # ordering = ['c_time']
        verbose_name = '用户名'
        verbose_name_plural = '用户信息表'
 
 

3.2 注册模型

#home/admin.py
 
from django.contrib import admin
 
# Register your models here.
from . import models
 
admin.site.register(models.exam_entry_table)    #考点信息表
admin.site.register(models.user_entry_table)    #用户考试信息表
admin.site.register(models.user_data)           #用户信息表

3.3 创建表单

#home/forms.py
 
from django import forms
from captcha.fields import CaptchaField
 
class UserForm(forms.Form):
    username = forms.CharField(label="用户名", max_length=128, widget=forms.TextInput(attrs={'class': 'form-control'}))
    password = forms.CharField(label="密码", max_length=256, widget=forms.PasswordInput(attrs={'class': 'form-control'}))
    captcha = CaptchaField(label='验证码')
class RegisterForm(forms.Form):
    gender = (
        ('male', "男"),
        ('female', "女"),
    )
    username = forms.CharField(label="用户名", max_length=128, widget=forms.TextInput(attrs={'class': 'form-control'}))
    password1 = forms.CharField(label="密码", max_length=256, widget=forms.PasswordInput(attrs={'class': 'form-control'}))
    password2 = forms.CharField(label="确认密码", max_length=256, widget=forms.PasswordInput(attrs={'class': 'form-control'}))
    email = forms.EmailField(label="邮箱地址", widget=forms.EmailInput(attrs={'class': 'form-control'}))
    sex = forms.ChoiceField(label='性别', choices=gender)
    captcha = CaptchaField(label='验证码')

3.4 路由及视图设计

    3.4.1 路由设计

这里用到的路劲较为复杂,采用项目urls和app的urls结合起来避免项目的urls过于拥挤。

先修改项目的urls.py文件:

#项目名/urls.py
 
path('homepage/',include('home.urls')),  #前面已经添加了,这里只做说明

再修改app中的urls.py文件:

#home/urls.py
 
from django.contrib import admin
from django.urls import path,include
from home import views
 
urlpatterns = [
    path('test/', views.test),
    path('my_data/',views.mydate),         #我的信息
    path('query_results/',views.query),    #查询报告信息
    path('cet_4/',views.cet_4),            #四级报名
    path('cet_6/',views.cet_6),            #六级报名
    path('change_my_data/',views.updata),
]

 3.4.2 视图设计

#home/views.py
 
from django.shortcuts import render, redirect
from . import models
from .forms import user_entry, user_datas
from django.http import HttpResponse,HttpResponseRedirect
# from django.contrib.auth.models import User
from login.models import User
 
# Create your views here.
 
def test(request):
    pass
    return render(request, 'home/test.html')
 
#我的信息
def mydate(request):
    username = request.session.get('user_name', None)
    account = User.objects.get(name=username)#用户登录注册表
    user = models.user_data.objects.get(user_name= username)
    return  render(request,"home/myself.html",{"user":user, "account":account})
 
#修改我的信息
def updata(request):
    username = request.session.get('user_name', None)
    # print("-----------------------")
    # print(username)
    # print("-----------------------")
    user_da = models.user_data.objects.get(user_name=username)
    user = User.objects.get(name=username)#login_user表
    if request.method == "POST":
        userdata = user_datas(request.POST)
        # print(userdata)
        if userdata.is_valid():
            user_das = userdata.cleaned_data
            # user.user_name = user_da['user_name'] #用户无法修改用户名
            user.email = user_das['email']
            user_da.user_true_name = user_das['user_true_name']
            user_da.user_id = user_das['user_id']
            user_da.user_school = user_das['user_school']
            user_da.save()
            user.save()
            # 四六级成绩无法修改
            # user_datas.user_f_score = user_da['user_f_score']
            # user_datas.user_s_score = user_da['user_s_score']
            return redirect('/homepage/my_data/')
    else:
        userdata = user_datas(initial={"email":user.email,"user_name":user_da.user_name,"user_true_name":user_da.user_true_name,"user_id":user_da.user_id,"user_school":user_da.user_school})
        return render(request, 'home/change_mydata.html', {"userdata":userdata})
 
#查询考试信息 还没完成,优化,条件判断
def query(request):
    username = request.session.get('user_name',None)
    user = User.objects.get(name=username)
    #用于判断用户是否报名
    user_en = models.user_entry_table.objects.filter(email=user.email)
    # print("********************")
    # print(user_en)
    # print(user_en[0])
    if user_en:
        # print(len(user_en))
        if len(user_en)==1:
            user_entry = models.user_entry_table.objects.get(email=user.email)
            user_point = user_entry.exam_point
            user_eid = user_entry.exam_id
            exam_entry = models.exam_entry_table.objects.get(exam_point=user_point, exam_id=user_eid)
            return render(request, 'home/query1.html', {"exam_entry": exam_entry})
        else:
            user_entry4 = models.user_entry_table.objects.get(email=user.email, exam_id=0)
            user_entry6 = models.user_entry_table.objects.get(email=user.email, exam_id=1)
            user_point4 = user_entry4.exam_point
            user_point6 = user_entry6.exam_point
            exam_entry4 = models.exam_entry_table.objects.get(exam_point=user_point4, exam_id=0)
            exam_entry6 = models.exam_entry_table.objects.get(exam_point=user_point6, exam_id=1)
            return render(request, 'home/query2.html', {"exam_entry4": exam_entry4, "exam_entry6":exam_entry6})
    else:
        # message = "你还未报名!请先报名之后再来查看!"
        # return render(request, 'login/index.html', locals())
        user_da = models.user_data.objects.get(user_name=user.name)
        school = user_da.user_school
        if school=='无':
            message = "请先更新你的学校信息!"
            return render(request, 'login/index.html', locals())
        else:
            point = models.exam_entry_table.objects.filter(exam_point=school)
            if point:
                if len(point)==1:
                    exam = models.exam_entry_table.objects.get(exam_point=school)
                    return render(request, 'home/exam1.html', {"exam": exam})
                else:
                    exam4 = models.exam_entry_table.objects.get(exam_point=school, exam_id=0)
                    exam6 = models.exam_entry_table.objects.get(exam_point=school, exam_id=1)
                    return render(request, 'home/exam2.html', {"exam4": exam4, "exam6": exam6})
            else:
                message="你的学校还未开放报名!详情请咨询学校相关部门!"
                return render(request, 'login/index.html', locals())
 
 
 
 
#四级报名
def cet_4(request):
    username = request.session.get('user_name', None)
    # 用户信息表,用户表,获取信息判断资格
    user_da = models.user_data.objects.get(user_name=username)
    user = User.objects.get(name=username)
    if request.method == "POST":
        cet4_form = user_entry(request.POST)
        if cet4_form.is_valid():
            # 四级考试对分数无要求
            # 只需要获取报考考点信息即可
            # email = cet4_form.cleaned_data['email']
            exam_id = '0'
            exam_point = cet4_form.cleaned_data['exam_point']
            #用与下面的考点判断
            point = models.exam_entry_table.objects.filter(exam_point=exam_point, exam_id='0')
            # 用与下面的是否重复报名判断
            entryer = models.user_entry_table.objects.filter(email=user.email, exam_id=exam_id)
            #判断个人信息是否完善
            if user_da.user_true_name=='无'or user_da.user_id=='无':
                message="请先完善个人真实信息之后再来报名!"
                return render(request, 'home/cet_4.html', locals())
            # 判断是否重复报名
            # print("判断是否重复报名")
            elif entryer:
                message = "请勿重复报名!"
                return render(request, 'home/cet_4.html', locals())
            elif point:
                # 考点存在
                # print("没有重复报名")
                message = "报名成功!请按时参加考试!"
                # 创建一条数据
                new_user = models.user_entry_table.objects.create()
                new_user.email = user.email
                new_user.exam_id = exam_id
                new_user.exam_point = exam_point
                new_user.save()
                # 考点容量减1,报考人数加1
                exam_entry = models.exam_entry_table.objects.get(exam_point=exam_point, exam_id=exam_id)
                exam_entry.number -= 1
                exam_entry.entry_number += 1
                exam_entry.save()
                return render(request, 'home/cet_4.html', locals())
            else:
                message = "该学校还未开放报名!详情请咨询学校相关部门!"
                return render(request, 'home/cet_4.html', locals())
    cet4_form = user_entry(initial={"email": user.email, "user_name": user_da.user_name, "user_true_name": user_da.user_true_name,
                  "user_id": user_da.user_id})
    return render(request, 'home/cet_4.html', locals())
 
 
#六级报名:
def cet_6(request):
    username = request.session.get('user_name', None)
    # 用户信息表,用户表,获取信息判断资格
    user_da = models.user_data.objects.get(user_name=username)
    user = User.objects.get(name=username)
    if request.method == "POST":
        cet6_form = user_entry(request.POST)
        if cet6_form.is_valid():
            # 只需要获取报考考点信息即可
            # email = cet4_form.cleaned_data['email']
            exam_id = '1'
            exam_point = cet6_form.cleaned_data['exam_point']
            f_score = user_da.user_f_score
            # 用与下面的考点判断
            point = models.exam_entry_table.objects.filter(exam_point=exam_point, exam_id=exam_id)
            # 用与下面的是否重复报名判断
            entryer = models.user_entry_table.objects.filter(email=user.email, exam_id=exam_id)
            # 判断个人信息是否完善
            if user_da.user_true_name=='无'or user_da.user_id=='无':
                message="请先完善个人真实信息之后再来报名!"
                return render(request, 'home/cet_6.html', locals())
                # 判断是否重复报名
            elif entryer:
                # print("判断是否重复报名")
                message = "请勿重复报名!"
                return render(request, 'home/cet_6.html', locals())
            # 判断考点是否存在
            elif point:
                # 考点存在
                #判断四级成绩是否合格
                if f_score >= 425:
                    # print("报名成功!请按时参加考试!")
                    # 创建一条数据
                    message = "报名成功!请按时参加考试!"
                    new_user = models.user_entry_table.objects.create()
                    new_user.email = user.email
                    new_user.exam_id = exam_id
                    new_user.exam_point = exam_point
                    new_user.save()
                    # 考点容量减1,报考人数加1
                    exam_entry = models.exam_entry_table.objects.get(exam_point=exam_point, exam_id=exam_id)
                    exam_entry.number -= 1
                    exam_entry.entry_number += 1
                    exam_entry.save()
                    return render(request, 'home/cet_6.html', locals())
                else:
                    message = "四级成绩大于425才能报名六级考试!"
                    return render(request, 'home/cet_6.html', locals())
            else:
                message = "该学校还未开放报名!详情请咨询学校相关部门!"
                return render(request, 'home/cet_6.html', locals())
 
    cet6_form = user_entry(
        initial={"email": user.email, "user_name": user_da.user_name, "user_true_name": user_da.user_true_name,
                 "user_id": user_da.user_id})
    return render(request, 'home/cet_6.html', locals())

到这里基本的后端都实现了。

4 项目最终框架展示

Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统

5 总结

  成果展示:

    注册:

Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统

Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统

  主页:

Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统

管理端:

Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统

数据库设计问题:

由于此次设计在开始之时没有设计完善,数据库各表之间的关联存在问题,例如本次报名系统而言,用户信息最好添加手机号码,我本打算使用邮箱即可,但是推荐使用联系更快的电话号码等等问题。

  附录: 整体项目包地址链接:

来源:https://blog.csdn.net/Afollower/article/details/98249499

相关视频教程:python从入门到精通视频(全60集)

获取方式:进入公众号,回复: python

Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统

(扫码关注,获取更多视频资源)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/112078.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • java不求有功,但求无过—异常处理

    java不求有功,但求无过—异常处理

    2021年11月29日
  • phpstorm2021.4.4激活码_通用破解码

    phpstorm2021.4.4激活码_通用破解码,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • 手把手教你实现一个微信自动回复机器人「建议收藏」

    手把手教你实现一个微信自动回复机器人「建议收藏」RebateBot返利机器人项目地址项目描述关键词:返利微信阿里妈妈机器人跨平台返利机器人,基于微信建立机器人通道与用户通过聊天快速生成返利链接利用闲置微信和极小的电脑性能开启24小时无人轮值返利机器人购物只需要发送链接给机器人,机器人能马上给你回复优惠价格及链接功能实现微信机器人这个模块在这里可以看到最新的代码微信机器人[x]消息回调[x]自动回…

  • 深度解析xxl-rpc之RPC原理

    深度解析xxl-rpc之RPC原理一.什么是RPC?RPC(remoteprocesscall),中文是远程过程调用的意思。怎么理解这个远程过程调用呢?可以这样理解,可以与本地的过程调用对比下,本地过程调用,也就是调用函数或者是调用方法,比如说,在单体架构中,我们要根据用户的id获取订单信息,我们就需要找到订单service,调用getOrderInfoById(Stringid)这个方法,这个调用动作这就是本地过程调…

    2022年10月31日
  • php strom教程,PhpStorm常用教程

    php strom教程,PhpStorm常用教程一、PhpStorm界面简化Ctrl+Shift+A查找快捷键ALT+1:关闭或打开左边项目二、PhpStorm几个最重要的快捷键快速查找文件:CTRL+SHIFT+N==>Shift+F显示文件有哪些方法:CTRL+F12==>Shift+F+M最近打开文件:CTRL+E查找方法名或类名:==>Shift+M三、PSR自动加载支…

  • python中unittest框架_unittest框架原理

    python中unittest框架_unittest框架原理unittest简介参考:https://urlify.cn/e6rAr2为什么要使用unittest在编写接口自动化用例时,我们一般针对一个接口建立一个.py文件,一条测试用例封装为一个函数(方法),但是在批量执行的过程中,如果其中一条出错,后面的用例就无法执行。使用测试框架可以互不影响的用例执行及更灵活的执行控制。unittest特点 •python自带的单元测试框架,无需安装; •用例执行互不干扰; •提供不同范围的setUp(测试准备)和t..

    2022年10月10日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号