Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用AJAX或类似的东西在Django中使用Python脚本?_Python_Ajax_Django_Django Rest Framework - Fatal编程技术网

如何使用AJAX或类似的东西在Django中使用Python脚本?

如何使用AJAX或类似的东西在Django中使用Python脚本?,python,ajax,django,django-rest-framework,Python,Ajax,Django,Django Rest Framework,我正在做一个物联网项目,它就像学校和学院的智能考勤和无现金支付系统。我使用Raspberry Pi 3作为我的客户机,使用DigitalOcean托管PostgreSQL和core Django项目。除了Raspberry Pi,我还使用EM-18 RFID阅读器和R305指纹阅读器。现在,到目前为止,我已经构建了一个CLI实用程序来使用project,但对于一个不太熟悉Linux或shell的人来说,这并不方便 现在我的问题在于我当前的代码逻辑。例如,如果我想将学生信息及其RFID/指纹信息添

我正在做一个物联网项目,它就像学校和学院的智能考勤和无现金支付系统。我使用Raspberry Pi 3作为我的客户机,使用DigitalOcean托管PostgreSQL和core Django项目。除了Raspberry Pi,我还使用EM-18 RFID阅读器和R305指纹阅读器。现在,到目前为止,我已经构建了一个CLI实用程序来使用project,但对于一个不太熟悉Linux或shell的人来说,这并不方便


现在我的问题在于我当前的代码逻辑。例如,如果我想将学生信息及其RFID/指纹信息添加到数据库中,我首先扫描分配给他们的RFID标签。检查该标记是否已经在数据库中,如果没有,则询问他们的信息。在这一步之后,我再次要求他们再次点击同一张卡以注册他们的指纹。所有这些过程在CLI上都可以正常工作。我不知道如何让操作员知道现在执行哪一步。虽然我用Django构建了一个web界面,它既不友好也不交互式。我想我必须使用JSON/AJAX才能做到这一点,但我不知道如何做到这一点。

请阅读本文,而不是作为一个答案,更像是一个较长的注释;)

因此,首先阅读MVC概念(例如:),了解web接口如何与其余代码交互

经典的django方法是

  • 基于您的
    模型
    创建
    表单
    (在
    forms.py中)
    
  • 您可以编写一些html来在网站上显示表单
  • 验证
    views.py中的表单输入
  • 返回结果并显示它们(同样是html)
  • 当你想用AJAX做这件事的时候,需要做一些额外的工作,但是结果是值得的。(例如:)

    您将调用您在
    url.py
    文件中首次初始化的特定url(
    path('checkForm',views.checkForm,name='checkForm'),
    ,在django 2.0中)

    url指向
    views.py
    中定义的函数,其名称为
    checkForm
    (与本例中的url路径相同,但您可以随意调用它)。在这个函数中,您可以编写python代码或从那里调用函数来执行db请求、验证等。 将带有代码结果的响应发回

    成功:功能(数据、状态){
    $('#whatever').html(数据);
    警惕(“任何”);
    }

    这里的“数据”是来自服务器的响应。 我希望我给了你一个正确方向的暗示。如果你在什么地方卡住了,请问一下

    p、 我不知道如何通过http发送指纹数据,请检查是否有库

    x=data.read(12).decode("utf-8")
    tag_id_in = x
    
    这是错误的代码,请清除x。第一个x是一个错误的变量名,第二个是完全冗余的。
    您还想将
    print
    语句转换为
    logs
    或其他任何内容,但打印不会让您走得更远

    请不要把这当作一个答案,而更像是一个较长的评论;)

    因此,首先阅读MVC概念(例如:),了解web接口如何与其余代码交互

    经典的django方法是

  • 基于您的
    模型
    创建
    表单
    (在
    forms.py中)
    
  • 您可以编写一些html来在网站上显示表单
  • 验证
    views.py中的表单输入
  • 返回结果并显示它们(同样是html)
  • 当你想用AJAX做这件事的时候,需要做一些额外的工作,但是结果是值得的。(例如:)

    您将调用您在
    url.py
    文件中首次初始化的特定url(
    path('checkForm',views.checkForm,name='checkForm'),
    ,在django 2.0中)

    url指向
    views.py
    中定义的函数,其名称为
    checkForm
    (与本例中的url路径相同,但您可以随意调用它)。在这个函数中,您可以编写python代码或从那里调用函数来执行db请求、验证等。 将带有代码结果的响应发回

    成功:功能(数据、状态){
    $('#whatever').html(数据);
    警惕(“任何”);
    }

    这里的“数据”是来自服务器的响应。 我希望我给了你一个正确方向的暗示。如果你在什么地方卡住了,请问一下

    p、 我不知道如何通过http发送指纹数据,请检查是否有库

    x=data.read(12).decode("utf-8")
    tag_id_in = x
    
    这是错误的代码,请清除x。第一个x是一个错误的变量名,第二个是完全冗余的。
    您还想将
    print
    语句转换为
    logs
    或其他任何内容,但打印不会让您走得更远

    我终于明白了。我把这个过程分为多个部分。然后我调用AJAX来访问它

    我的
    url.py
    文件:

    from django.conf.urls import url
    from .views import tag, check_tagid, scan_tag
    
    urlpatterns = [
        url(r'^tag/', tag, name="tag"),
        url(r'^check_tagid/', check_tagid, name="check_tagid"),
        url(r'^scan_tag/', scan_tag, name="scan_tag"),
    ]
    
    from django.shortcuts import render
    from django.http import HttpResponse, JsonResponse
    from .models import Student
    import serial
    
    def check_tagid(request):
        """Check if scanned tag id is already associated or not"""
        tagid = request.GET.get('tagid', None)
        if Student.objects.filter(tag_id__iexact=tagid).exists():
            data = {
                'is_taken': Student.objects.filter(tag_id__iexact=tagid).exists(),
                'student': Student.objects.get(tag_id=tagid).name
            }
        else:
            data = {
                'is_taken': Student.objects.filter(tag_id__iexact=tagid).exists(),
            }
        return JsonResponse(data)
    
    
    def scan_tag(request):
        """Function to check if tag is scanned or not"""
        if request.is_ajax():
            ## Init RFID reader
            data = serial.Serial(
                                port='/dev/ttyUSB1',
                                baudrate = 9600,
                                parity=serial.PARITY_NONE,
                                stopbits=serial.STOPBITS_ONE,
                                bytesize=serial.EIGHTBITS
                                )
    
            context = {'tagid': data.read(12).decode("utf-8")}
            return JsonResponse(context) 
        else:
            return HttpResponse("This route only handles AJAX requests")
    
    
    def tag(request):
        return render(request, 'students/tag.html', {})
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
    </head>
    <body>
        <center><h1><div id="tag_id">Scanning for tag</div></h1></center>
        <div id="if_exists"></div>
    
    
      <script src="https://code.jquery.com/jquery-3.1.0.min.js"></script>
    
    <script type="text/javascript">
    $(document).ready(function() {
        $.get("/scan_tag/", function(data) {
            console.log(data.tagid);
            var x = document.createElement("INPUT");
            x.setAttribute("id", "tag_id_in");
            x.setAttribute("type", "hidden");
            x.setAttribute("value", data.tagid);
            document.body.appendChild(x);
            // check tag
            tagid = $("#tag_id_in").val();
            console.log(tagid);
            $.ajax({
                type: "GET",
                url: "{% url 'check_tagid' %}",
                data: {
                    'tagid': tagid
                },
                success: function(data) {
                    if (data.is_taken) {
                        document.getElementById('tag_id').innerHTML = "Welcome "+data.student;
                    } else {
                        document.getElementById('tag_id').innerHTML = "No student with this tag id found";
                    }
                }
            });
        });
    });
    </script>
    
    
    </body>
    </html>
    
    我的
    视图.py
    文件:

    from django.conf.urls import url
    from .views import tag, check_tagid, scan_tag
    
    urlpatterns = [
        url(r'^tag/', tag, name="tag"),
        url(r'^check_tagid/', check_tagid, name="check_tagid"),
        url(r'^scan_tag/', scan_tag, name="scan_tag"),
    ]
    
    from django.shortcuts import render
    from django.http import HttpResponse, JsonResponse
    from .models import Student
    import serial
    
    def check_tagid(request):
        """Check if scanned tag id is already associated or not"""
        tagid = request.GET.get('tagid', None)
        if Student.objects.filter(tag_id__iexact=tagid).exists():
            data = {
                'is_taken': Student.objects.filter(tag_id__iexact=tagid).exists(),
                'student': Student.objects.get(tag_id=tagid).name
            }
        else:
            data = {
                'is_taken': Student.objects.filter(tag_id__iexact=tagid).exists(),
            }
        return JsonResponse(data)
    
    
    def scan_tag(request):
        """Function to check if tag is scanned or not"""
        if request.is_ajax():
            ## Init RFID reader
            data = serial.Serial(
                                port='/dev/ttyUSB1',
                                baudrate = 9600,
                                parity=serial.PARITY_NONE,
                                stopbits=serial.STOPBITS_ONE,
                                bytesize=serial.EIGHTBITS
                                )
    
            context = {'tagid': data.read(12).decode("utf-8")}
            return JsonResponse(context) 
        else:
            return HttpResponse("This route only handles AJAX requests")
    
    
    def tag(request):
        return render(request, 'students/tag.html', {})
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
    </head>
    <body>
        <center><h1><div id="tag_id">Scanning for tag</div></h1></center>
        <div id="if_exists"></div>
    
    
      <script src="https://code.jquery.com/jquery-3.1.0.min.js"></script>
    
    <script type="text/javascript">
    $(document).ready(function() {
        $.get("/scan_tag/", function(data) {
            console.log(data.tagid);
            var x = document.createElement("INPUT");
            x.setAttribute("id", "tag_id_in");
            x.setAttribute("type", "hidden");
            x.setAttribute("value", data.tagid);
            document.body.appendChild(x);
            // check tag
            tagid = $("#tag_id_in").val();
            console.log(tagid);
            $.ajax({
                type: "GET",
                url: "{% url 'check_tagid' %}",
                data: {
                    'tagid': tagid
                },
                success: function(data) {
                    if (data.is_taken) {
                        document.getElementById('tag_id').innerHTML = "Welcome "+data.student;
                    } else {
                        document.getElementById('tag_id').innerHTML = "No student with this tag id found";
                    }
                }
            });
        });
    });
    </script>
    
    
    </body>
    </html>
    
    我的
    tag.html
    文件:

    from django.conf.urls import url
    from .views import tag, check_tagid, scan_tag
    
    urlpatterns = [
        url(r'^tag/', tag, name="tag"),
        url(r'^check_tagid/', check_tagid, name="check_tagid"),
        url(r'^scan_tag/', scan_tag, name="scan_tag"),
    ]
    
    from django.shortcuts import render
    from django.http import HttpResponse, JsonResponse
    from .models import Student
    import serial
    
    def check_tagid(request):
        """Check if scanned tag id is already associated or not"""
        tagid = request.GET.get('tagid', None)
        if Student.objects.filter(tag_id__iexact=tagid).exists():
            data = {
                'is_taken': Student.objects.filter(tag_id__iexact=tagid).exists(),
                'student': Student.objects.get(tag_id=tagid).name
            }
        else:
            data = {
                'is_taken': Student.objects.filter(tag_id__iexact=tagid).exists(),
            }
        return JsonResponse(data)
    
    
    def scan_tag(request):
        """Function to check if tag is scanned or not"""
        if request.is_ajax():
            ## Init RFID reader
            data = serial.Serial(
                                port='/dev/ttyUSB1',
                                baudrate = 9600,
                                parity=serial.PARITY_NONE,
                                stopbits=serial.STOPBITS_ONE,
                                bytesize=serial.EIGHTBITS
                                )
    
            context = {'tagid': data.read(12).decode("utf-8")}
            return JsonResponse(context) 
        else:
            return HttpResponse("This route only handles AJAX requests")
    
    
    def tag(request):
        return render(request, 'students/tag.html', {})
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
    </head>
    <body>
        <center><h1><div id="tag_id">Scanning for tag</div></h1></center>
        <div id="if_exists"></div>
    
    
      <script src="https://code.jquery.com/jquery-3.1.0.min.js"></script>
    
    <script type="text/javascript">
    $(document).ready(function() {
        $.get("/scan_tag/", function(data) {
            console.log(data.tagid);
            var x = document.createElement("INPUT");
            x.setAttribute("id", "tag_id_in");
            x.setAttribute("type", "hidden");
            x.setAttribute("value", data.tagid);
            document.body.appendChild(x);
            // check tag
            tagid = $("#tag_id_in").val();
            console.log(tagid);
            $.ajax({
                type: "GET",
                url: "{% url 'check_tagid' %}",
                data: {
                    'tagid': tagid
                },
                success: function(data) {
                    if (data.is_taken) {
                        document.getElementById('tag_id').innerHTML = "Welcome "+data.student;
                    } else {
                        document.getElementById('tag_id').innerHTML = "No student with this tag id found";
                    }
                }
            });
        });
    });
    </script>
    
    
    </body>
    </html>
    
    
    扫描标签
    $(文档).ready(函数(){
    $.get(“/scan\u tag/”,函数(数据){
    console.log(data.tagid);
    var x=document.createElement(“输入”);
    x、 setAttribute(“id”,“tag_id_in”);
    x、 setAttribute(“类型”、“隐藏”);
    x、 setAttribute(“值”,data.tagid);
    文件.正文.附件(x);
    //检查标签
    tagid=$(“#tag#id_in”).val();
    console.log(tagid);
    $.ajax({
    键入:“获取”,
    url:“{%url'检查标记ID“%””,
    数据:{
    “tagid”:tagid
    },
    成功:功能(数据){
    如果(数据已获取){
    document.getElementById('tag_id')。innerHTML=“Welcome”+data.student;
    }否则{
    document.getElementById('tag_id')。innerHTML=“没有具有此t的学生